如何摆脱LEFT JOIN SQL Query中的重复值

时间:2013-04-10 07:00:55

标签: php mysql sql left-join

我有一个带有父和子评论的评论表,其中包含以下字段

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

它提供以下输出 enter image description here

您可以看到第一个表中有如此多的重复行

我想要以下输出

enter image description here

你可以看到,在这个输出中,首先是父注释(在parent_id中为NULL),然后是它的子注释,然后是下一个父注释,然后是它的子注释。

如何形成我的SQL查询以获得此输出。 注意:(第二张图片不是任何查询的结果,我已将其修改为仅清除我的观点并告诉您我想要的输出类型。)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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

我创建了表并使用上面的查询进行了测试,它对我来说很好。如果上面的方法对你不好,那么请导出评论表并在这里发帖。我会发送确切的查询。

再次,如果它在cakephp中,那么在查询中使用'threaded',它总是适用于数据库中的父子类型表结构。

等待回复...