• 締切済み

重複レコードの表示について

イベントテーブルがあり、イベントの内容(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 |青森

みんなの回答

  • xiade
  • ベストアンサー率64% (88/137)
回答No.1

>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 側で希望の形に添うよう適当に料理すればよいかと思いますがいかがでしょうか。

99Micchi
質問者

お礼

xiadeさん、ありがとうございます。 >:: 花火大会 | 打ち上げ,出店 | 北海道,青森,岩手 >のようにカラム単位での重複をまとめたいということですか? >(SQLでは直接こうはなりませんが) はい、この通りです。SQLではできないのですね。 一度バラす方法参考にさせていただきます。 もしよろしければ教えていただきたいのですが、テーブルの構成は これであってますでしょうか。よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • テーブルの結合について

    親テーブルに対して子テーブルが複数あるときの結合方法がわかりません。 テーブル2、3はそれぞれマスタテーブルの値を格納しています。 具体的には4つのテーブルを結合しテーブル1のname項目、テーブル2のtest項目、area_id、pref_idで検索をしたいです。 right joinで結合してみましたが、テーブル3、4でテーブル2のtest_idを2回参照するのでエラーがでてから先に進めない状況です。 他の回答を読んだのですができなかったので質問させてください。 お分かりの方教えてください。 よろしくお願いいたします。 [teble1] ID | name 1 佐々木 2 鈴木 3 田中 [teble2] test_id | ID(table1の値) | test 1 1       テスト1 2 1       テスト2 3 2       テスト3 [teble3] test_id | area_id 1    1 1    4 2    3 [teble4] test_id | pref_id 1    1 2    2 2    5 3    2 バージョンは4.0.27です。

    • ベストアンサー
    • MySQL
  • アクセスではうまく行くのにMYSQLではうまくいきません。

    いつもありがとうございます。初心者です。どうか教えて下さい。 テーブル area フィールド area_id, area_name テーブル pref フィールド pref_id, pref_name, area_id テーブル city フィールド city_id, city_name, pref_id というように3つのテーブルがあり、それぞれarea_id,pref_id,city_id を主キーにして 結合して表示したいのですが、エラーになります。 SQL文は次のように書きました。 SELECT area.area_id, area.area_name, pref.pref_id, pref.ken_name, city.city_id, city.pref_id FROM area INNER JOIN (pref INNER JOIN city ON pref.pref_id = city.pref_id) ON area.area_id = pref.area_id するとエラーメッセージで #1064 - You have an error in your SQL syntax near '(pref INNER JOIN city ON pref.pref_id = city.pref_id) ON area.area_id = pref.are' at line 2 のように表示されます。 マイクロソフトのアクセスですると問題なく表示されるのですが、 MYSQLではうまく行きません。どうか御指導をお願い致します。

    • ベストアンサー
    • MySQL
  • SQL ServerのINNER JOINについて

    SQL Server 2008 R2のINNER JOINについて質問させて下さい。 ------------------------------ SELECT * FROM [Customer]    INNER JOIN Pref       ON Customer.CustomerPref1 = Pref.PrefId       ON Customer.CustomerPref2 = Pref.PrefId       ON Customer.CustomerPref3 = Pref.PrefId WHERE ([CustomerId] = 123) ------------------------------ 3つもONがあって変なSQL文となっております。 (当然SQLエラーとなります。) やりたい事は、 顧客フォーム[Customer]の中に、都道府県をプルダウン選択する項目が3つあります。 3つとも都道府県マスタテーブルをリレーション(FK)しております。 3つの都道府県項目で「都道府県名」をそれぞれSELECTするには、 どうしたらよいでしょうか? ご教授頂けますようお願い申し上げます。 ------------------ ▼DB情報 顧客情報テーブル:Customer 顧客ID:CustomerId 都道府県カラム1:CustomerPref1(1,2,3,~などの値が格納) 都道府県カラム2:CustomerPref2(1,2,3,~などの値が格納) 都道府県カラム3:CustomerPref3(1,2,3,~などの値が格納) 都道府県マスタテーブル:Pref 都道府県ID:PrefId(1, 2, 3,~などの値が格納) 都道府県名:PrefName(1:北海道, 2:青森県, 3:岩手県~などの値が格納)

  • 人口の都道府県別の割合を求めるには・・・?

    バージョンはMySQL4.1です。 下図のような、各都道府県の人口が格納してあるデータベースがあります。 【データベース x001】 |   Pref  |popu| |________| |北海道   |568 | |青森県   |147 |    ・・・・ ここから、それぞれの都道府県の人口の割合(都道府県人口÷各人口の合計 %表示)を表示させたいのですがうまくいきません。 (こんな感じに表示させたいのです↓) |   Pref  |popu|percent| |________|     | |北海道   |568 |  4.4 | |青森県   |147 |  1.7 | SELECT Pref, popu, popu/SUM(popu) from x001; だと、北海道1件の結果しか表示されません。 どなたか解説して頂けないでしょうか。

    • ベストアンサー
    • MySQL
  • すみませんが教えてください。JAVA

    県テーブル 県ID,県名 001,北海道 002,青森 003,秋田 004,岩手 方角テーブル 方角ID,方角名 001,東 002,南 003,西 004,北 県位置テーブル 県,県,方角 001,002,002 003,004,001 このようなテーブルがあった時に、「北海道」と検索して「北海道の南に青森がある」のように表示させるプログラムをjavaで作成しているのですが、 select 県名,方角名 from 県,方角 where 県ID or 方角ID in (select * from 県位置 where 県ID like '%" + 001 + "%' ) のようなSELECT文を書くと ERROR 1241 (21000): Operand should contain 1 column(s) と表示されてしまいます。 どのようにすればうまくいくのでしょうか?

  • 外部結合で表示されないレコードがある

    いつもお世話になっております。 SQLで3つのテーブルの結合をして、結果を得たいのですが、 空欄があるために表示されないレコードがあります。 どうすれば表示できるか、どなたか教えていただけないでしょうか? テーブルが A:明細(call_data) B:業者(m_price) C:料金(m_cust) とあり、 SELECT c.area_id, m.cust_id, p.price FROM call_data c, m_cust m, m_price p where c.calling_num = m.orig_opn_dgt(+) and m.cust_id = p.cust_id and p.area_id = c.area_id(+) ; としたのですが、A.明細データのarea_idで空欄のレコードは 出力されませんでした。 (+)を使うと外部結合で片方のデータを出力できると思ったのですが、それができないのは何が原因なのでしょうか? c_id a_id price 1 111 10.2 2 222 15.5 3 333 20 1 4 111 10.25 2 111 13.5 5 222 12 6 888 6 666 17.55 と出て欲しいところが c_id a_id price 1 111 10.2 2 222 15.5 3 333 20 4 111 10.25 2 111 13.5 5 222 12 6 666 17.55 とでます。 分かりづらくて申し訳ありません。 よろしくお願いいたします。

  • JOINでつなげサブテーブルの複数レコードをまとめ

    現在、下記の【main_table】【sub_table】2つのデータベースを 【SQL】文にて【sample.php】の表示となっています。 【main_table】 +---+---+-----------+ |id|no|todouhuken| +---+---+-----------+ |1|001|北海道  | +---+---+-----------+ |2|002|青森   | +---+---+-----------+ 【sub_table】 +---+---+-----------+ |id|no|shi      | +---+---+-----------+ |1|001|函館市  | +---+---+-----------+ |2|001|札幌市  | +---+---+-----------+ |3|002|青森市  ‎| +---+---+-----------+ |4|002|つがる市 ‎| +---+---+-----------+ 【SQL】 SELECT main_table.*, sub_table.* FROM main_table JOIN main_table ON main_table.no = main_table.no 【sample.php】 +---+-----------+-----------+ |no|todouhuken|shi     | +---+-----------+-----------+ |001|北海道  |函館市  | +---+-----------+-----------+ |001|北海道  |札幌市  | +---+-----------+-----------+ |002|青森   |青森市  ‎| +---+-----------+-----------+ |002|青森   |つがる市 ‎| +---+-----------+-----------+ この、【sample.php】を下記のような表示にしたいのですが可能でしょうか? 【sample.php】理想 +---+-----------+-------------------+ |no|todouhuken|shi            | +---+-----------+-------------------+ |001|北海道  |函館市 / 札幌市 | +---+-----------+-------------------+ |002|青森   |青森市 / つがる市 ‎| +---+-----------+-------------------+ ご教授お願い致します。

    • ベストアンサー
    • PHP
  • 一度のsqlで値を取得するには

    mysql5です。 テーブル名pref(都道府県) id,name 1,北海道 2,青森県 3,秋田県 ・・・ テーブル名user(会員) id,pref_flg,addr01,addr02 1,1,市町村,それいかの住所 2,2,市町村,それいかの住所 3,3,市町村,それいかの住所 ・・・ 上記のようなテーブルであるとした場合userをselectしデータを取得します。 SELECT id, CONCAT(pref_flg, addr01, addr02) AS addr FROM user WHERE id = ? この結果addrには『1(※都道府県id)市町村それいかの住所』で取得できるのですが 一度のsqlで都道府県名も取得するにはどうすればできますか? 具体的には 『1(都道府県id)市町村それいかの住所』 を 『都道府県名市町村それいかの住所』 としてidではなく名称で取得したいです。 単純にuserに都道府県名を入れればできるのですが上記のように複数のテーブルで管理する場合の 方法を教えてください。

    • ベストアンサー
    • MySQL
  • ラジオボタンで表示された内容を整列させたい

    PHPとMYSQL初心者です。どうも難しくて暗礁に乗り上げております。 どなたか助けて下さい。 次のコードは、フォームを使って「エリア」を指定して、 指定された都道府県を表示するようにしたいのですが、 表示はできるのですが、それを3列に整列して表示をさせることが できません。 茨城 群馬 千葉 埼玉 東京 神奈川 と次々に表示されてしまうものを 茨城 群馬 千葉 埼玉 東京 神奈川 というように3県毎に改行をしたいのですが、 方法がわかりません。どなたかご指導お願いいたします。 <form method='POST' action='search_city.php'> <?php // MYSQLへ接続 $con = MYSQL_CONNECT("******","******","******"); mysql_select_db("jp00001"); // クエリの実行 $area_id = htmlspecialchars($_POST["area_id"]); $res = mysql_query("SELECT area.area_id, area.area_name, pref.pref_id, pref.pref_name FROM area INNER JOIN pref ON area.area_id = pref.area_id WHERE area.area_id='$area_id'"); // クエリのチェック if (!$res) { die('クエリーが失敗しました。'.mysql_error()); } // クエリの文字の表示 while ($row = mysql_fetch_assoc($res)) { ?> <label><font size="-1"> <input type="radio" name="pref_id" value="<?php echo $row['pref_id'] ?>"> <?php echo $row['pref_name'] ?></font></label> <? } ?> <tr> <td height='21' align="center" bgcolor='#DDFFFF'> <input type='submit' value='市区エリアへ'>

    • ベストアンサー
    • PHP
  • MySQLでのcsvファイル読み込み

    必要に駆られたのでMySQLについて勉強しているのですが、 ファイル読み込みで問題が起こり、詰まってしまっています。 MySQL上で自作したsampledb内にテーブルprefectureを作成し、 そのテーブル内にPrefecture.csvファイル(文字コードshiftJIS)からデータを入力しようと しているのですが、最初の一件しかテーブルに格納されず、他のデータが入らないのです。 以下に入力したクエリ文を掲載します。 create database sampledb default character set sjis create table Prefecture(PREF_CD INT(3),PREF_NAME VARCHAR(10),PRIMARY KEY(PREF_CD)) LOAD DATA INFILE "Prefecture.csv" -> INTO TABLE Prefecture FIELDS TERMINATED BY"," -> LINES TERMINATED BY"\r\n"; Query OK, 1 row affected, 1 warning (0.08 sec) Records: 1 Deleted: 0 Skipped: 0 Warnings: 1 select * from prefecture +---------+-----------+ | PREF_CD | PREF_NAME | +---------+-----------+ |       1 | 北海道 2 | +---------+-----------+ 1 row in set (0.00 sec) Prefecture.csvについてはこちらのサイト仕様上添付できませんでしたが、 1,北海道 2,青森県 3,岩手県 . . .(以下省略) のように、47都道府県の番号と地名を並べたものです。 独力では解決法を見出せません。 どうかご助力お願いします。

    • ベストアンサー
    • MySQL