2013-04-10 55 views
1

我有一個父一個意見表和子評論具有以下字段如何在左擺脫重複值的JOIN SQL查詢

comments 
    comment_id 
    parent_id 
    thread_id (Foreign Key) 
    title 
    body 
    comment_date 
    user_name 

我想整理一下,首先出現在這種形式的評論父評論那麼它的孩子的意見,然後下一個父評論,然後它的子

我使用下面的查詢

SELECT c1 . * , c2 . * 
FROM comments c1 
LEFT JOIN comments c2 ON c2.parent_id = c1.comment_id 
WHERE c1.parent_id IS NULL 
AND c1.thread_id =122 

這是給下面的OU評論把 enter image description here

你可以看到,有在第一個表

我想下面的輸出中這麼多重複的行

enter image description here

你可以看到,在這個輸出中,首先來了父註釋(在parent_id中有NULL),然後是它的子註釋,然後是下一個父註釋,然後是它的子註釋。

如何形成我的SQL查詢來獲取此輸出。 注意:(第二張圖片不是任何查詢的結果,我修改了它以清除我的觀點並告訴您我需要什麼樣的輸出。)

+0

你想要不同的評論嗎? – 2013-04-10 07:03:08

+0

@chandresh_cool這裏沒有明顯的問題。其實這是排序問題。我想以這種形式來理清,首先是家長評論,然後是其所有孩子的評論等等。 – 2013-04-10 07:07:20

+0

只需要選擇特定的recored而不是c1。*,C2。*和一些order by子句,你的數據看起來就像你想要的那樣 – 2013-04-10 07:09:26

回答

3

沒有任何行是重複的,這只是c1評論被重複選擇,因爲它表面上是許多c2評論的父母。這聽起來像你實際上想要兩個分開查詢。

SELECT * FROM comments WHERE parent_id IS NULL AND thread_id = 122 
UNION 
SELECT c2.* FROM comments c1 JOIN comments c2 ON c2.parent_id = c1.comment_id 
WHERE c1.parent_id IS NULL AND c1.thread_id =122 
0
SELECT c1 . * 
FROM comments c1 
RIGHT JOIN comments c2 ON c2.parent_id = c1.comment_id 
WHERE c1.parent_id IS NULL 
AND c1.thread_id =122 
0
SELECT c1 . * , c2 . * 
FROM comments c1 
LEFT JOIN comments c2 ON c2.parent_id = c1.comment_id 
WHERE c2.parent_id IS NOT NULL 
AND c1.thread_id = 122 

我的表中,與上面的查詢測試,它工作正常me.If上述不爲你工作得很好,那麼請導出評語表,並張貼在這裏。我會發送確切的查詢。

再次,如果它在cakephp中,那麼在find查詢中使用'threaded',對於數據庫中的父子類型表結構,它總能正常工作。

等待迴應...

+0

我試過這個查詢,但它沒有給出想要的結果。這裏是我的意見表的結構 CREATE TABLE IF NOT EXISTS'comments'( 'comment_id' INT(11)NOT NULL AUTO_INCREMENT, 'parent_id' INT(11)DEFAULT NULL, 'thread_id' INT(11) NOT NULL, 'title' VARCHAR(400)NOT NULL, 'body' VARCHAR(400)NOT NULL, 'date_comment'時間戳NOT NULL DEFAULT CURRENT_TIMESTAMP, 'user_name' VARCHAR(100)NOT NULL, PRIMARY KEY( 'comment_id') )ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 12 – 2013-04-10 08:17:53