- ベストアンサー
重複データを表示しない
はじめまして。質問させて頂きます。 この教えてGoo!のような質問掲示板を、下記のようなカラムにて作っているのですが、例えば、登録ユーザーさんのがこれまでどのような回答をしたか?を閲覧出来るページを作る場合、普通にselectしただけでは、同じ質問に2度回答してあるときなどは、複数表示されてしまいますが、これを避けるためにはどのようなSQL文にしたら宜しいのでしょうか? SQLを触り始めて間もないこともあり、調べようにも適切なキーワードが思いつかず、なかなか目的の情報にたどり着かないため投函させていただきました。宜しくお願い致します。。 help(質問テーブル) no id subject contents date answer(回答テーブル) no help_no id answer date ※help_noは、質問テーブルのnoと紐づけるためのカラムです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
MySQLは、4.0以前、4.1、5.0以降で、機能に大きな差があります。バージョンを明記してください。 表の構成列だけ提示されても、各列にどういう値が入るのか説明されていなければ、適切なアドバイスができません。 >例えば、登録ユーザーさん 「登録ユーザさん」を識別する列は、どれなのでしょうか? help表、answer表のid列なのでしょうか? >同じ質問に2度回答してあるときなどは、複数表示されてしまいますが、これを避けるため group byを調べてみましょう。distinctでも、同等な操作が可能です。 サブクエリを使おうと思えば、MySQL 4.1以降など、バージョンが関係してきます。
その他の回答 (1)
- masa6272
- ベストアンサー率66% (93/140)
使用している、MySQLのバージョンも確かに重要ですが。 普通のSELECTって、どんなSELECTですか? 複数回答のうち、どれを欲しいんですか? その辺を明確にしてください。
お礼
masa6272さんへ はじめまして、こんにちは!早速の回答をありがとう御座います! >普通のSELECTって、どんなSELECTですか? >複数回答のうち、どれを欲しいんですか? 普通って変ですよね。。初心者用の本を見ながら勉強していたので、 select * from answer where..... というのが普通という感覚でいました。 また、質問内容ですが、改めchukenkenkouさんへのお礼に書かせていただきましたので、そちらをご覧いただければ幸いです。(決して省略しているつもりはないのですが、同じことを書くことになってしまうもので・・ゴメンなさい)
お礼
chukenkenkouさんへ はじめまして、こんにちは!ご回答ありがとう御座います! すみません、MySQLのバージョンは4.1です。 投函時掲載した各テーブルは私のPC内で試に作っているものでしたが、以下のようにカラムを変更しました。 help(質問テーブル) no s_id subject contents date answer(回答テーブル) no help_no a_id answer date 上記、s_idと、a_id とは別テーブルにあるメンバー用のIDを、質問した際に誰が投函したか?を登録するためのものであり、回答テーブルに関しても誰が回答したか?を登録するようにしてみました。 (質問者IDは、s_id。回答者IDは、a_idという具合です) 質問時、教えてGoo!のようなと申しましたのも、同じ質問に同じ方が複数回答する場合がありますよね? そういったとき、例えばchukenkenkouさんが、どういった質問に回答しているのか?というページを作りたいと考えているのですが、同じ質問に複数回答している場合も1度の回答の場合も、同じ質問のタイトル(上記テーブルで言ったらsubject)を1つのみ検索結果として表示させたいと考えています。 >group byを調べてみましょう。distinctでも、同等な操作が可能です。 ありがとう御座います。しかし、先ほどから色々と調べているのですが、思うように出来ずにいます。(恥ずかしい) 引続き調べてみますが、具体的なアドバイスがあったら嬉しいです。
補足
chukenkenkouさんへ group byを使って解決することが出来ました! ありがとう御座いました!