- 締切済み
重複レコードの表示について
イベントテーブルがあり、イベントの内容(1つ以上)はプログラムテーブルに格納しています。 さらにイベントがどの県で行われるかという情報を格納するエリアテーブル、 県のマスタと4つで構成しました。 花火大会を条件にテーブルを結合したとき4件あります。 while ($col = mysql_fetch_array($rst)) {}で表示させたいのですが、 重複している部分を1件にして表示する方法がわかりません。 distinctではできませんでした。 どなたかご教授いただけないでしょうか。よろしくお願いします。 「結合結果」 花火大会|打ち上げ |北海道 花火大会|打ち上げ |青森 花火大会|出店 |北海道 花火大会|出店 |岩手 「イベントテーブル」 event_id |name 1 |花火大会 2 |マラソン大会 「プログラムテーブル」 program_id |event_id | program 1 |1 |打ち上げ 2 |1 |出店 3 |2 |開会式 「エリアテーブル」 area_id| program_id | pref_id 1 | 1 | 1 2 | 1 | 2 3 | 2 | 1 「県マスタ」 pref_id | name 1 |北海道 2 |青森
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- xiade
- ベストアンサー率64% (88/137)
>distinctではできませんでした。 いずれの行も重複しておらずユニークですからね。 >重複している部分を1件にして表示する方法がわかりません。 重複してないので意図している内容が良く分かりません。 期待する結果イメージも記載してください。 以下 推測で進めますが、 >「結合結果」 >花火大会|打ち上げ |北海道 >花火大会|打ち上げ |青森 >花火大会|出店 |北海道 >花火大会|出店 |岩手 これがたとえば :: 花火大会 | 打ち上げ,出店 | 北海道,青森,岩手 のようにカラム単位での重複をまとめたいということですか? (SQLでは直接こうはなりませんが) とりあえずやるとすれば、あまり美しくはないですが バラしたものを union で結合してみるとか: mysql> select * from test00; -- 説明の簡略化のためにあらかじめ1テーブルにしておきます +----------+----------+--------+ | event | prog | pref | +----------+----------+--------+ | 花火大会 | 打ち上げ | 北海道 | | 花火大会 | 打ち上げ | 青森 | | 花火大会 | 出店 | 北海道 | | 花火大会 | 出店 | 岩手 | +----------+----------+--------+ 4 rows in set (0.00 sec) mysql> select ' ' as event,' ' as prog,' ' as pref -- MySQL4.1.1以前のバグ の workaround (union時 各カラムの長さが最初のレコードに縛られるため) union ( select distinct event,null,null from test00 ) union ( select distinct null,prog,null from test00 ) union ( select distinct null,null,pref from test00 ); +----------+----------+--------+ | event | prog | pref | +----------+----------+--------+ | | | | | 花火大会 | | | | | 打ち上げ | | | | 出店 | | | | | 北海道 | | | | 青森 | | | | 岩手 | +----------+----------+--------+ 7 rows in set (0.00 sec) ※ブラウザ上ではプロポーショナルフォントの都合で表がズレていますがご了承ください このままではあまり有意性がないので PHP 側で希望の形に添うよう適当に料理すればよいかと思いますがいかがでしょうか。
お礼
xiadeさん、ありがとうございます。 >:: 花火大会 | 打ち上げ,出店 | 北海道,青森,岩手 >のようにカラム単位での重複をまとめたいということですか? >(SQLでは直接こうはなりませんが) はい、この通りです。SQLではできないのですね。 一度バラす方法参考にさせていただきます。 もしよろしければ教えていただきたいのですが、テーブルの構成は これであってますでしょうか。よろしくお願いします。