• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mysql+php 日付別料金データで最安値の取得)

mysql+php 日付別料金データで最安値の取得

このQ&Aのポイント
  • phpで、mysqlに日付毎料金の月の最安値を求める方法を知りたい
  • mysqlのデータベースには、日付、料金などのフィールドがあり、それを利用して月の最安値を求めたい
  • バージョンはphp2.??だが、カテゴリーがmysqlである場合は再度投稿する

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

whileの使い方がへんですね。 以下のようにしてみると少しはわかりやすくなります。 while($rec_fare = mysql_fetch_array( $result_fare, MYSQL_ASSOC )) $rec[$rec_fare['month']] = $rec_fare['tariff']; } print_r($rec);

takotan2
質問者

お礼

yambejpさん ご連絡遅くなり申し訳ございませんでした。 10月、11月と別々に欲しいページがあったので、下記で対応できました。 yambejpさんのコードだと配列なんでしょうか。。勉強不足ですみません。。。もうちょっと見てみます。でも本当にありがとうございました。 $sql_fare = "select month,code,min(tariff) as tariff from date left join ryoukin on '200612' between left(from,6) and left(to,6) where code = '$code' group by '200612'"; $resulfare = mysql_query($sql_fare); while($rec_fare = mysql_fetch_array( $resulfare, MYSQL_ASSOC )) { foreach ($rec_fare as $k=>$v) { $rec_fare[$k] = mb_converencoding($v,'UTF-8','EUC-JP'); } $tariff = $rec_fare[tariff]; }

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>無事出来たのですが、データが 300300300・・・のように表示され、 >10月300、11月300・・・のような表示方法が分かりません。。。 うーん。どのような処理をしたら300300300・・・のように表示 されるのかを示してもらわないとなんとも答えようがありませんね。 PHPでwhileでまわしてprintしたのでしょうか? ご自身なりのソースで結構ですので例示してください。

takotan2
質問者

補足

yambejpさま 遅くなり申し訳ございませんでした。自分なりにやってみたのですが、どうも埒があきません。。 下記はyambejpさんのを素直にやってみたものです。 例になかった t_code ='AAT1AP286BCAN' を追加しています。 $sql_fare = "select month,min(tariff) as tariff from date left join ryoukin on month between left(from,6) and left(to,6) where t_code ='AAT1AP286BCAN' group by month"; $result_fare = mysql_query($sql_fare); while($rec_fare = mysql_fetch_array( $result_fare, MYSQL_ASSOC )) { foreach ($rec_fare as $k=>$v) { $rec_fare[$k] = mb_convert_encoding($v,'UTF-8','EUC-JP'); } echo "$rec_fare[tariff]"; } よろしくお願いします。

すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>料金の月の最安値 >20061001 20070115 300 >20070116 20070117 400 >20070118 20070331 570 >欲しい答え 10月300 11月300 12月300 1月400 2月570 3月570 えーと。この場合1月は400ではなくて300になるのでは? それが違うと全然ちがうので仕様をもっとしっかり提示してください。 とりあえず以下のようなやり方で調整になると思います。 まず日付管理用のテーブルを作って必要な集計月を登録おきます。 CREATE TABLE `date` (`month` VARCHAR(6)); INSERT INTO `date` VALUES('200610'),('200611'),('200612'),('200701'),('200702'),('200703'); あとは、以下のようにLEFT JOINしてやればよいでしょう。 SELECT `month`,MIN(`tariff`) AS `tariff` FROM `date` LEFT JOIN `ryoukin` ON `month` BETWEEN LEFT(`from`,6) AND LEFT(`to`,6) GROUP BY `month`;

takotan2
質問者

お礼

yambejpさま レスありがとうございました。データの間違い、申し訳ございませんでした。初心者ゆえご連絡遅くなり申し訳ございませんでした。 無事出来たのですが、データが 300300300・・・のように表示され、10月300、11月300・・・のような表示方法が分かりません。。。 図々しいお願いなのですが、どうすれば分割?できるのでしょうか? よろしくお願いします。

すると、全ての回答が全文表示されます。
回答No.1

例えば、2006年12月分のものならば、 SELECT min(`tariff`) FROM ryoukin WHERE `from` < '20070101' AND `to` >= '20061201'; で求められますよね。 PHPでループをまわして、月単位でクエリを投げてやればいいんじゃないでしょうか。 クエリ一回で、全月の結果を得る方法は、あるかもしれませんが、私には判りません。その回答を期待されているならば、mysqlのカテゴリで質問された方がよいかと思います。

takotan2
質問者

お礼

fdsjaklfjasさん 遅くなりましたが、回答ありがとうございました。 今回はyambejpさんの方法で無事出来ました。 でも考えていただいて感謝します。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A