PHPとDBを利用して時刻表を作成する方法

このQ&Aのポイント
  • PHPとDBを利用して時刻表を作成する方法について教えてください。
  • 具体的には、時刻表とDBの連動、時間と到着時間の照合について知りたいです。
  • 現在の質問文章では、テーブル名が「time」で、時刻と番号の対応表があります。これを参考にして、時刻表の表示を実現したいです。
回答を見る
  • ベストアンサー

【PHPとDBの連動】時刻表作成

【PHPとDBの連動】時刻表作成 PHPとDBを利用して、このような時間表を作成したいのです。 | 時 | 到着 | | 間 | 時間(分)| ---------------- | 6 |     | | 7 | 00  30 | | 8 |     | | 9 |     | | 10 | 24   | | 11 |     | | 12 | 30  57 | | 13 |     |   :   :   : | 23 | 03   | | 24 |     | 反映させるDBは以下のとおり テーブル名:time |番 | 時 | |号 | 刻 | ------------ | 1 | 7:00 | | 2 | 7:30 | | 3 | 10:24| | 4 | 12:20| | 5 | 12:57| | 6 | 23:03| ------------ このDBの内容を、上の表にある時間と照らし合わせ、 表の7時の欄にはDBの番号(1)と(2)にある「7:00」と「7:30」の「分」の部分だけを 「到着時間(分)」に表示させたいんです。 どのようにすればいいのか全く分からないので、 難しい説明ですが、どうかお願いします。

  • PHP
  • 回答数3
  • ありがとう数6

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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>";

koucha714
質問者

お礼

大変遅くなってしまい、申し訳ございません。 yambejpさんの回答を元に、期待していた結果が返ってきて、解決できました。 本当にありがとうございました。

koucha714
質問者

補足

返事が遅くなり、大変申し訳ございません。 もうひとつだけ補足が・・・、何度も申し訳ないです。 説明本文の前半は実は、DBではないんです。 PHPであのように表示させたいという、完成予想図みたいなものなんです。 ですので、上の表にある「時間」や「到着時間(分)」も、DBの列名ではなく、PHPで記入したものなのです。 今のところ、PHP上に時間(6時~24時の欄)を表示させることはできました。 しかし、DBに登録している時刻をうまくページに載せることができませんでした。 もしかしたら、画像つきで同じ質問をするかもしれません。今の状態では伝わりにくいのも当たり前ですからね・・・。 本当にyambejpさんには迷惑かけてしまいました。申し訳ございません。

その他の回答 (2)

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

>テーブル名: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 (`時間`)

koucha714
質問者

補足

あ、大事なことを書き忘れていました。申し訳ございません。 できれば、時間表に関する「時間」は、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)
回答No.1

(時刻6~24まで繰り返し as $i){ 1:時間$iに対し表示するデータをDBから持ってくる 2:分の部分だけ抜き出し。 3:表示する } とすればいいかと思います。 分に抜き出すのはDB上でやる場合とPHPでやる場合が考えられます。 ※実際に私が作るのでしたら、DBのtimeに日付を追加し登録する時刻と分を分けるとかやると思います。 あと繰り返してDBから抜き出すものめんどうなので、同じ日のデータを時間と分で分けて抜き出して時の多次元配列とかに入れてしまったほうが効率がよいと思います。

koucha714
質問者

お礼

大変遅くなりましたが、解決できました。 かなり困っていた部分だったので、本当にありがとうございました。

koucha714
質問者

補足

回答ありがとうございます。ではこの場合はやはり「foreach」を使っていったほうがいいのでしょうか? 自分でも調べていくのですが、どうかよろしくお願いします。

関連するQ&A

  • PHPのプルダウンメニューにDBのデータを入れたいのですが。

    初めて質問させていただきます。 PHPとMySQLを使って、とあるwebページを作成したいのですが、 DB内のあるテーブルのデータを、PHPの配列に格納し、その内容をプルダウンメニューに反映させたいのです。 データベース内のテーブルの内容(例)は以下のとおり。 テーブル名:sample | 番 | 時 | | 号 | 間 | ------- | 1 | 朝 | | 2 | 昼 | | 3 | 夜 | ------- プルダウンメニューに表示させたい内容は、この場合では「時間」です。  ---- |朝 ▼|   「▼」をクリックすると  ---- ↓  ---- |朝 ▼| |昼   |   このように表示される。 |夜   |   内容はDBから取ってきたもの。  ---- このように表示したいのです。 どなたかPHPに詳しい方、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 時刻表について

     乗り換え駅の時刻表について 始発駅と 到着駅で質問した時に 始発駅の時刻表は役立ちますが 途中の乗り換え駅の時刻表は表示されません  到着駅の時刻表が表示されてますが 到着駅の先に行くのではないので意味がないのでは  乗り換え駅の時刻表が表示されれば役立つと思いますが

  • 駅の時刻表と鉄道の時刻表の名称を使い分けたい

    鉄道の時刻表には,ある駅に鉄道が来る時間を知らせる時刻表(例えば「水道橋駅の時刻表」)と,ある鉄道がそれぞれの駅に着く時間を知らせる時刻表(例えば「やまびこ50号の時刻表」)とがあると思います。 今私は,両方を「時刻表」と表現しましたが,これらにはそれぞれ正式名称がありますでしょうか。それとも,どちらかは時刻表と言うけれど,どちらかは時刻表とは言わないのでしょうか。 現在,小旅行のためのパンフレットを作成しており,両者を区別できる言葉があればと使い分けたいと思っております。ご存じでしたらお教えください。

  • ソフトウェアの仕様書作成について(C言語)

    「電車の時刻表を画面に表示するプログラムについて、詳細仕様を検討して作成しなさい。要求は、ユーザが、現在時刻と到着したい希望時刻を入力すると、今から乗れそうな列車の候補をいくつか提示して欲しいということだけである。 この要求に沿って仕様を詳細に検討しなさい。」 という仕様書作成の問題なのですが、よくわかりません。 とりあえず自分なりにがんばってみたのですが(後述)、どうも不自然さがあふれてて困っています。 どこを直して行けばよいでしょうか? <************ここから*****************> 関数の形式:int train_time(int present_h, int present_m, int arrival_h, int arrival_m, const int time_table[][]) 関数の目的: 時刻表の電車の時間、分をそれぞれtime_table[i][0], time_table[i][1]に読み込み、(iは電車を区別する番号で整数である。) 現在の時間と分をそれぞれpresent_h, present_mから受け取り、また、到着したい希望時間と分をそれぞれarrival_h, arrival_mから受け取る。 時刻表の時刻と比較し、現在時刻以降に発車し、到着時刻以前に到着するすべての電車の発車時刻と到着時刻を表示する。 入力の形式:present_h, arrival_h, time_table[i][0]は、0以上24以下の時間を表す整数  present_m, arrival_m, time_table[i][1]は0以上60以下の分を表す整数 出力の形式:  -1、0以上の整数 説明:  時刻は24時間表記とする。  秒単位は考慮しない。 例外時の処理:  時刻で無いものを受け取った場合、例えば24以上の時間、60以上の分、文字列を受け取った場合などは-1を返す。  NULLを受け取った場合-1を返す

  • phpの表の作り方について

    PHPでの表の作り方について質問です。 PHPで時間割を作成できるようにしたいのですが、どうすればいいかわかりません… (1)画像の様に表を作成 (2)ボタンを押して、別のウィンドウが表示し教科を選択するか、プルダウンで教科を選択できるようにする (3)選択された教科が表に反映するようにする。 上記のようにしたいのですが、何か参考になるサイトか本があれば教えてください。 できればソースを少し載せてくれるとありがたいです。

    • ベストアンサー
    • PHP
  • ジオプラスのDBの作成について

    ジオプラスにてホームページの開設を行おうと思っております。 そこで、PHPでページを作成しDBにてデータを管理したいと思うのですが、テーブルの作成などはどのようにして行うのでしょうか? DQLiteが使用可能との事なので調べてみたんですがよく分かりません。 1.PHPにテーブル作成の処理を書いておく。 2.ジオプラスにメール等で作成を依頼する。 3.あらかじめDBを作成しておく。 初心者なので難しいとは思うんですが、自分で作りたいと思っています。(もちろんネットに落ちているサンプルを参考にしますが・・・) どなたかご存知の方がおられたら教えてください。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • ヨーロッパの電車時刻表

    西ヨーロッパの主な国の電車の駅では、出発時刻表と同じ頻度で到着時刻表が掲示されています。何時にどこを出発してどこを何時に通った電車が○番ホームに何時に到着します、と。便利なような気もしますが、実際具体的にこの情報が有用なケースは、と考えると、極めて特異なケースしか思い浮かばないのです。「9時に駅に行って一番最初に来る急行電車に乗ります。普通電車は無視だけれども、次の急行を待つより20分以上早くつくなら乗ります。特急に乗る予定はありませんが、使わなければ到着が11時を過ぎてしまう場合に限り乗ります。という訳で、到着を出迎えてね!」って言われたらこの到着時刻表が便利だなあ、とか、、、 あそこまで気合を入れて掲示してあるのだから、何かきっと「あ、なるほど」というような意味があると思うのですが、、、 事情に詳しい方いませんか?

  • 【php&mysql】 何でDBを作っていますか?

    データベース、テーブルを新規に作成する時、 現在 phpmyadminを使用しているのですが phpmyadminでDBやテーブルを作成するというのは一般的なのでしょうか?

    • ベストアンサー
    • MySQL
  • どちらが正しい時刻?

    やまびこ51号に乗って、東京→一ノ関に行く場合、一ノ関駅に到着する時間が、 http://www.ekikara.jp/cgi-bin/route.cgi?incode=13101011&intext=%93%8C%8B%9E&outcode=03209011&outtext=%88%EA%83m%8A%D6&month=201208&day=28&hour=6&min=0&arrive=&way=&airplane=on&sprexprs=on&utrexprs=on&max=5&sort=time&half=on&cut=on&direct=on&.x=13&.y=4 で見ると、08:33着なのですが、 路線時刻表の http://ekikara.jp/newdata/line/1301011/down1_1.htm で見ると、08:37になっています。 結局一ノ関駅には、08:33と08:37のどちらの時間で到着するのでしょう? 路線時刻表の08:37は、発車時刻で、到着時刻が記載されてないだけなのでしょうか?

  • PHP初心者です。課題で九九表を作成中です。

    初めて質問いたします。 PHP初心者ですが、 よろしくお願いいたします。 今回、課題でPHPで"九九表"をマス目つきのテーブル (9×9)上に作成したいと考えています。 最近ループを習ったので、九九を表示させるソースは なんとかできそうです。(ネストとか使って・・。) が、テーブル表となると<html>を使ってまでは思い ついたのですが・・・実際にループと組みあわせると 自分で色々とためしたのですが、うまくいきません。 自分でも理解でそうなコードとアドバイスかがあったら お教えください、お願いいたします。

    • ベストアンサー
    • PHP