- ベストアンサー
postgreSQL+phpでの検索結果表示について
現在、postgreSQL+phpで簡単なイベント検索機能付きのホームページを作っています。 DB側には、テーブルがひとつだけ。 日付、イベント名、場所などの列があり、場所が複数なため、同じ日付けで別のイベントという情報もあります。 表示したいのは、日付ごとの情報です。 しかも検索は○日~○日という風に数日間に渡って検索します。 つまり、 1月1日 イベント名:その1 場所:会場1 イベント名:その2 場所:会場2 --------- 1月3日 イベント名:その3 場所:会場1 イベント名:その4 場所:会場4 --------- という感じです。 これが上手く行かないんですよね。 「考え方」で結構ですのでご教授頂けないでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。何が不明かよくわかりませんが、SQLで取得したあとの配列変数を使用して、行う簡単な処理を記述してみました。SQL取得部分は定数として書いちゃってます。動作確認済みです。(PHPははじめてなので変なところがあるとは思いますが。) <HTML> <HEAD> </HEAD> <BODY> <?php $arr[0] = "2004-01-01"; $arr[1] = "2004-01-01"; $arr[2] = "2004-01-01"; $arr[3] = "2004-01-02"; $arr[4] = "2004-01-03"; $prev = $arr[0]; for($i=0;$i<5;$i++){ if($arr[$i] != $prev){ $prev = $arr[$i]; printf("------<BR>"); } printf("date:%s<BR>", $arr[$i]); } printf("------"); ?> </BODY> </HTML>
その他の回答 (2)
- you-m
- ベストアンサー率58% (190/327)
私もPHP自体は、あまり詳しくありませんが・・・ SQLでデータを取り出すのと、書式(表示形式)を整理する処理は、別々に行えばよいのでは? SELECTで取り出したデータは、次々に配列に追加しておいて、全部取り出したら、その配列を使ってループし、中のの日付文字列を操作するイメージで、比較も分岐も行えばよいかと。格納時に多次元配列を使っていれば、さらに楽かもしれません。 ロジックそのものは、#1の方のものでよいかと思います。
お礼
ご丁寧にありがとうございます。 実は昨日からようやくデータベースに再び取りかかったのですが、まだ解決してません.... でも、ちょっと時間も経ちすぎてしまいましたし、この辺で締め切りたいと思います。
- Vargas
- ベストアンサー率45% (9/20)
1)select * from テーブル where 日付 >= to_date('検索開始日付','YYYY-MM-DD') and 日付 <= to_date('検索終了日付','YYYY-MM-DD') order by 日付,イベント名,場所; でデータを取得する。 (検索日付の入力フォーマットが2004/3/11ならば、フォーマット文字列は'YYYY/MM/DD'にする。) 2)上記取得データ数、以下を繰り返す。 3)日付データが前データと同じ場合は"イベント名:"SQL取得イベント名 及び"場所:"SQL取得場所を出力する。 4)イベント名が前データと同じ場合は、"場所:"SQL取得場所のみ出力する。 5)日付データが前データと違う場合は"---------"を出力する。 で、どうでしょう。当方phpは知りませんので、ロジックだけ。
補足
こんばんは。 回答ありがとうございます。 どうにも引っかかっているのは実は、取得した日付とその次に取得した日付を比較する部分でして。 (ご存じないとのことですが)phpだと、その変数は$arr[0]などの可変変数なわけでして。 どこで比較するのか?という。 そこで何か発想を変えようかと思った次第でして。 引き続きよろしくお願いします。
お礼
ご丁寧にありがとうございます。 実は昨日からようやくデータベースに再び取りかかったのですが、まだ解決してません.... でも、ちょっと時間も経ちすぎてしまいましたし、この辺で締め切りたいと思います。