我有一个带有父和子评论的评论表,其中包含以下字段
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
它提供以下输出
您可以看到第一个表中有如此多的重复行
我想要以下输出
你可以看到,在这个输出中,首先是父注释(在parent_id中为NULL),然后是它的子注释,然后是下一个父注释,然后是它的子注释。
如何形成我的SQL查询以获得此输出。 注意:(第二张图片不是任何查询的结果,我已将其修改为仅清除我的观点并告诉您我想要的输出类型。)
答案 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',它总是适用于数据库中的父子类型表结构。
等待回复...