我有一个应用程序设置了嵌套评论附加到帖子。由于硬盘空间的价格便宜,我决定使用closure table方法(幻灯片40)进行评论,与查询和管理树结构似乎相当容易。但是,我遇到了一个问题。我似乎无法弄清楚如何根据帖子ID抓取树形路径,而不是祖先ID(幻灯片49)。使用JOIN在闭包表上运行SELECT查询?
我的数据库结构如下:
table: comment_paths
--------------------
parent_id (fk on comments.id)
child_id (fk on comments.id)
depth
table: comments
---------------
id
parent_id (fk on comments.id)
post_id (fk on posts.id)
text
table: posts
---------------
id
name
如果我知道PARENT_ID事前,如幻灯片,它是简单的抢树:
SELECT c.*, p.*
FROM comments AS c
JOIN comment_paths AS p
ON c.id = p.child_id
WHERE p.parent_id = 1
不过,我不知道事先知道parent_id
;我只知道post_id
。数据库设置方式,有一个以上的树与帖子相关联:
[post]
-----------------------------------------
[comment] [comment] [comment] depth: 0
| |
[reply] [reply] depth: 1
| |
[r] [r] depth: 2
我最初的解决方案是这样的查询:
SELECT c.*, p.*
FROM comments AS c
JOIN comment_paths AS p
ON c.id = p.child_id
WHERE p.parent_id IN
(SELECT id FROM comments WHERE parent_id IS NULL AND post_id = 6)
它返回正确的数据,但我感觉像一个嵌套的SELECT,这是不正确的。有一个更好的方法吗?
谢谢!
尝试此查询'选择C *,P * FROM 评论为C JOIN comment_paths为P。 ON c.id = p.parent_id WHERE c.parent_id IS NULL AND c.post_id = 6' – Meherzad
@Meherzad没有工作。 :(只返回了树的顶部 – Patrick