2017-01-11 3 views
2

私はアカウント、投稿、ディスカッションテーブルを持っています。
投稿を取得するときにも、その投稿に関連するディスカッションを受けたいと思っています。
テーブルの関係は投稿が0回以上のディスカッションを持つことができます。 次のクエリを書きました。クエリを複数回書くことをお勧めしますか

SELECT p.*,d._id, d.discussion, d.discussed_by 
FROM posts p, discussions d 
WHERE d.post_id = p._id 

このクエリは機能しますが、結果は次のようになります。 から_idからaccount_idは投稿テーブルからです。この投稿について100件のディスカッションがある場合、結果には100の重複データが含まれます。どのように私はこれを克服することができます。私の考えは、この投稿を初めて取得し(最初のクエリ)、この投稿のすべてのディスカッションを取得します(2番目のクエリ)。どのようにそのことについて?私は、次の形式で結果
ポスト(1)議論(1)、議論(2)を取得したいPHPの配列形式、議論(3)

しかし、次の結果では、今の私のクエリ復帰。
ポスト(1)ディスカッション(1)
ポスト(1)ディスカッション(2)
ポスト(1)ディスカッション(3)
Iは、PHPとMySQLを使用しています。 Result of the above query

Wanted result, is it possible or not?

は、それは可能ですか?

+2

あなたはこの –

+1

のクエリに参加自体は確かに重複していない議論を左に使用する必要があります。 –

+1

@Chean Panchalどうすれば使用できますか?私に説明してくれませんか? –

答えて

1

同じ投稿IDを共有しているディスカッションにGROUP_CONCATを使用したい結果を得る1つのオプション。これにより、そのスレッドのカンマ区切りの一覧が表示されます。このような何か作業をする必要があります:

SELECT t1.*, 
     COALESCE(t2.discussion, 'NA') 
FROM posts t1 
LEFT JOIN 
(
    SELECT _id, GROUP_CONCAT(discussion) AS discussion 
    FROM discussions 
    GROUP BY _id 
) t2 
    ON t1.post_id = t2._id 
+0

結果にディスカッションテーブルのデータがありません。クエリで何かを変更する必要がありますか? –

+0

私は自分の答えを更新しました。単に 'discussion'に追加参加してください。私は '。*'を使用して各行を選択することをお勧めします。これにより、NULLをより簡単に処理できるようになります。 –

+0

答えはうまくいきますが、結果は私の問題と同じです。 –

関連する問題