前提・実現したいこと
予約データから必要なデータ一週間分を横に出したいです。
【例】
本 予約開始日 予約開始時間 予約終了予定日 予約終了予定時間
本1 6/8 12:00 6/8 18:00
本1 6/8 18:00 6/9 12:00
本1 6/9 13:00 6/10 18:00
本2 6/8 10:00 6/9 18:00
本2 6/10 10:00 6/10 18:00
本3
…
上記のデータを以下のように横に表示したいです。
本 6/8 6/9 6/10 … 6/14
本1 12:00-18:00 18:00-24:00 00:00-12:00 13:00-18:00
本2 10:00-24:00 00:00-18:00 10:00-18:00
本3
…
DBはpostgreSQLを使っています。
SQLで一発で取得できるのでしょうか?
私は取得できなかったため、PHPで処理しようとしていますが
うまくできません。
おわかりの方、ご教示お願いします。
できればSQLを教えて頂けたら幸いです。
もしくはPHPでどう配列にもたせるか教えて頂けたら幸いです。
よろしくお願いします。
【追記】
画面表示としては図のようにHTML側で表現します。
日付ごとにセルがあり、このセルは固定値となっているのと、本の予約率算出の都合で
日をまたぐ予約をわざと24:00で分割しています。
この形式になるようにデータを取得したいです。
実際に書いたソースは以下の通りですが、取得した配列をhtml側でどう表現すればいいか悩んでいます。
配列自体はできているのですが、配列の二次元目が予約番号?となってしまい、html側で日付ごとに
配列を区切れずにいます。
// 実現したい配列
$res_array["本のコード"]["日付"]["予約時間"]
// 現在の配列
$res_array["本のコード"]["予約の行数"]["予約時間"]
PHPのコード
1 2// 重複している本をひとまとめにする 3// SQLで一番上に書いたデータを取得 → $予約リスト 4 5$book_list = array(); 6$tmp = ""; 7foreach($予約リスト as $res){ 8 if($tmp != $res["本のコード"]){ 9 $tmp = $res["本のコード"]; 10 $book_list = $res["本のコード"]; 11 } 12} 13$res_array = array(); 14$i = 0; 15$j = 0; 16// 表現したい配列の生成 ←ここがだめ 17foreach($book_list as $book){ 18 foreach($予約リスト as $res){ 19 if($book["本のコード"] == $res["本のコード"]){ 20 $res_array[$i][$j] = $res["本のコード"]; 21 $book_list = $res["本のコード"]; 22 if(!in_null($res["予約時間"])){ 23 $res_array[$i][$j]["予約時間の長さ"] = $res["予約時間の長さ"]; 24 } 25 } 26 $j++; 27 } 28 $i++; 29}
回答2件
あなたの回答
tips
プレビュー