2011-06-18 16 views
3

私はすべてのコメントが格納されているテーブルを持っています。いくつかのコメントは質問、その他の回答です。 だから、私のテーブルは次のようになります。Mysql - 同じテーブルのデータを結合する

id parent_id message is_answer answered 
1 0   2x2  0   1 
2 1   4  1   0 
3 0   5x9  0   0 
4 1   2x9  0   0 
5 1   2x8  0   1 
6 5   16  1   0 

そして結果として、私は、この表を取得したいのですが:

q_id q_message q_answer 
1  2x2   4 
3  5x9   NULL 
4  2x9   NULL 
5  2x8   16 

だから、私は彼らに、すべての質問と回答を取得したいのですが、もし存在すれば。

答えて

5

テーブルへの参加を妨げるものは何もありません。あなたの要求された出力のみのために答え、「4」を示し

+------+-----------+----------+ 
| q_id | q_message | q_answer | 
+------+-----------+----------+ 
| 1 | 2x2  | 4  | 
| 1 | 2x2  | 2x9  | 
| 1 | 2x2  | 2x8  | 
| 3 | 5x9  | NULL  | 
| 4 | 2x9  | NULL  | 
| 5 | 2x8  | 16  | 
+------+-----------+----------+ 
6 rows in set (0.00 sec) 

:それは質問にすべての答えを示しているので、これはかなり...あなたが欲しいと述べた出力が得られないことを

SELECT q.id AS q_id, q.message AS q_message, a.message AS q_answer 
FROM table AS q 
LEFT JOIN table AS a ON a.parent_id = q.id 
WHERE q.is_answer = 0; 

は注意質問1あなたが意図的に意図したものかどうか分からない場合は、表示したくない回答をフィルタリングするために、GROUP BYやその他のロジックを追加する必要があります。

2

テストしたが、これはトリックを行う必要がありません。

select q.id as q_id,q.message as q_message ,a.message as q_answer FROM comments q LEFT OUTER JOIN comments a ON (a.parent_id = q.id and a.is_answer=1 and q.is_answer=0) 

私はあなたのテーブルのデザインがis_answer列なしで行うことができ、その質問ならば、あなただけのPARENT_ID = NULLを設定することができると思いますか?

+0

ありがとうございます! a.is_answer = 1をON()に追加するとトリックになりました!この条件がないと、ジョインは回答を持つ行のみを返します。これを説明できますか? :) –

+0

この回答には、回答としてのすべての回答が質問として含まれています。確かにそれは意図したものではありません。 – Flimzy

+0

私はそれがa.is_answer = 1であるとは思わない、その左------> OUTER <------- JOIN – Gryphius

関連する問題