- ベストアンサー
PHPとDBを利用して時刻表を作成する方法
- PHPとDBを利用して時刻表を作成する方法について教えてください。
- 具体的には、時刻表とDBの連動、時間と到着時間の照合について知りたいです。
- 現在の質問文章では、テーブル名が「time」で、時刻と番号の対応表があります。これを参考にして、時刻表の表示を実現したいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>時間表に関する「時間」は、PHP側で出しておきたいんです。 同感です。SQLになんでもやらせるよりは、その方がいいですね。 こんなかんじでどうですか? $sql=<<<eof select `時間`,group_concat(`分` separator ' ') as `到着時間(分)` from (select hour(時刻) as `時間`,DATE_FORMAT(時刻,'%i') as `分` from `時刻表テーブル`) as sub group by `時間` eof; $res=mysql_query($sql); while($rows = mysql_fetch_array($res,MYSQL_ASSOC)){ $jikoku[$rows["時間"]]=$row["到着時間(分)"]; } $tempHtml=""; for($i = 6; $i <= 24; $i++){ $tempHtml .= "<tr><td>{$i}</td><td>{$jikoku[$i]}</td></tr>\n"; } print "<table>{$tempHtml}</table>";
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
>テーブル名:time 予約語のからみがあるので時刻表テーブルとします。 create table `時刻表テーブル`(`番号` int,`時間` time); insert into `時刻表テーブル` value(1,'7:00' ),(2,'7:30' ),(3,'10:24'),(4,'12:20'),(5,'12:57'),(6,'23:03'); ここで以下のSQLで処理をすれば当座分の時刻表がえられます。 select `時間`,group_concat(`分` separator " ") as `到着時間(分)` from (select hour(時刻) as `時間`,DATE_FORMAT(時刻,"%i") as `分` from `時刻表テーブル`) as sub group by `時間`; 6時から24時まで空欄も含めてだすなら、時刻管理テーブルを用意しておき create table `時間管理テーブル`(`時刻` int); insert into `時間管理テーブル` values(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),(21),(22),(23),(24); こうします select `時間`,COALESCE(`分`,"") as `到着時間(分)` from `時間管理テーブル` left join( select `時間`,group_concat(`分` separator " ") as `分` from (select hour(時刻) as `時間`,DATE_FORMAT(時刻,"%i") as `分` from `時刻表テーブル`) as sub group by `時間` ) as sub2 using (`時間`)
補足
あ、大事なことを書き忘れていました。申し訳ございません。 できれば、時間表に関する「時間」は、PHP側で出しておきたいんです。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 今はPHPでこんな感じにやっています。 for($i = 6; $i <= 24; $i++){ $tempHtml .= "<tr>"; $tempHtml .= "<td>$i</td>"; : : $tempHtml .= "</tr>\n"; } <html> : <?= $tempHtml ?> : </html> 何度も質問してしまい、申し訳ございませんが、 どうかよろしくお願いします。
- moon_night
- ベストアンサー率32% (598/1831)
(時刻6~24まで繰り返し as $i){ 1:時間$iに対し表示するデータをDBから持ってくる 2:分の部分だけ抜き出し。 3:表示する } とすればいいかと思います。 分に抜き出すのはDB上でやる場合とPHPでやる場合が考えられます。 ※実際に私が作るのでしたら、DBのtimeに日付を追加し登録する時刻と分を分けるとかやると思います。 あと繰り返してDBから抜き出すものめんどうなので、同じ日のデータを時間と分で分けて抜き出して時の多次元配列とかに入れてしまったほうが効率がよいと思います。
お礼
大変遅くなりましたが、解決できました。 かなり困っていた部分だったので、本当にありがとうございました。
補足
回答ありがとうございます。ではこの場合はやはり「foreach」を使っていったほうがいいのでしょうか? 自分でも調べていくのですが、どうかよろしくお願いします。
お礼
大変遅くなってしまい、申し訳ございません。 yambejpさんの回答を元に、期待していた結果が返ってきて、解決できました。 本当にありがとうございました。
補足
返事が遅くなり、大変申し訳ございません。 もうひとつだけ補足が・・・、何度も申し訳ないです。 説明本文の前半は実は、DBではないんです。 PHPであのように表示させたいという、完成予想図みたいなものなんです。 ですので、上の表にある「時間」や「到着時間(分)」も、DBの列名ではなく、PHPで記入したものなのです。 今のところ、PHP上に時間(6時~24時の欄)を表示させることはできました。 しかし、DBに登録している時刻をうまくページに載せることができませんでした。 もしかしたら、画像つきで同じ質問をするかもしれません。今の状態では伝わりにくいのも当たり前ですからね・・・。 本当にyambejpさんには迷惑かけてしまいました。申し訳ございません。