我有一个用于存储注释的表,其结构如下:
评论
ID | post_id | comment | parent
1 | 1 | hello world | null
2 | 1 | reply 1 | 1
3 | 1 | reply 2 | 1
4 | 1 | reply 3 | 1
我想使用单个sql查询获取所有回复的父评论。 目前我使用嵌套查询来检索特定父评论的回复,我知道这不是最佳做法。 我需要使用单个查询来完成此操作。
我当前的SQL查询代码段是:
parent_id =("select id,comment from comments where post_id='1' and parent='null'")["id"]
loop{
"select comment from comments where post_id='1' and parent= parent_id"
}
我正在使用这些嵌套查询来获取带有回复的评论,使用单个查询实现此目的的最佳做法是什么?
答案 0 :(得分:0)
试试这个
select t.id,t1.comment from table1 t inner join table t1 on t1.id=t.parentid
and t.parentid is not null and t1.parentid is null
答案 1 :(得分:0)
我认为这个查询可以获取命令的所有记录(Parent + child)。
select id,comment from comments where post_id='1'
此外,当您想要分别识别父母和子女时。在select查询中也获取parentID。
select id,comment, parent from comments where post_id='1'
在c#代码中,您可以找到父(父级为空)和子级(父级为1)。
答案 2 :(得分:0)
这就是我的所作所为:
解决方案的关键是WITH RECURSIVE公用表表达式。
create table post_comment(
id serial not null primary key,
post_id int not null,
comment text,
parent_id int
);
insert into post_comment(post_id, comment, parent_id) values(1, 'hello world', null);
insert into post_comment(post_id, comment, parent_id) values(1, 'reply 1', 1);
insert into post_comment(post_id, comment, parent_id) values(1, 'reply 1', 1);
insert into post_comment(post_id, comment, parent_id) values(1, 'reply 1', 1);
with recursive comments(c) as (
select * from post_comment where id = 1
union all
select * from post_comment where parent_id = 1
)
select * from comments;