问题本身可能写错了,所以如果有人更好地了解如何定义它,请编辑问题。
只有重要的专栏。
comments_to_post
只包含与comment_parent_id
comments
上的NULL
为post_id
的评论的关联,因为其他评论只是其他评论的孩子。
我正在努力解决查询问题,结果会将评论分配给特定帖子(comments
)及其子项。
我尝试从comments_to_post
中选择并加入post_id = ?
NULL
,但难怪我只收到comment_parent_id
comments_to_post
的评论,因为只有他们通过comment_id comment_parent_id
1 NULL
2 1
3 1
4 NULL
5 4
。
如何将结果添加到那些儿童评论中?
示例数据:
post_id
10
20
comment_id post_id
1 10
4 20
... where post_id = 10
comment_id
1
2
3
{{1}}
答案 0 :(得分:1)
您应该将字段post_id
添加到表comments
(在这种情况下,您不需要表comments_to_posts
)。只有在这种情况下,您才能通过一个数据库请求选择所有注释和子注释。
另外,如果你想在树形结构中有一些数据(评论,菜单等),我建议你阅读http://en.wikipedia.org/wiki/Nested_set_model。解决这个问题是一种非常有趣和优雅的方法。
答案 1 :(得分:1)
更新 -
您可以在没有UNION
的情况下执行此操作,如下所示。请注意,这两种方法仅适用于单级注释线程。
SELECT c.*
FROM comments_to_post ctp , comments c
WHERE ctp.post_id = 1
AND ( c.comment_id = ctp.comment_id OR c.comment_parent_id = ctp.comment_id)
首先获取父评论,然后获取子项,并将它们全部UNION。见DEMO fiddle。
SELECT c.*
FROM comments_to_post ctp , comments c
WHERE ctp.post_id = 1
AND c.comment_id = ctp.comment_id
UNION ALL
SELECT c.*
FROM comments_to_post ctp , comments c
WHERE ctp.post_id = 1
AND ctp.comment_id = c.comment_parent_id
ORDER BY comment_id