-1

我有两个表,帖子和评论。每个帖子至少有一条评论。我的表格如下所示

post表具有 post idpid和一个title. 该comments表有 post id pid、 comment idcid和 timestampts

table post {
   int pid 
   varchar title
}

table comments {
   int pid
   int cid 
   int ts
   varchar comment
}

我喜欢通过在顶部显示带有最新评论的帖子来列出所有帖子。

我试过group by了,但没有按预期工作

select p.pid, c.ts from posts p, comments c where c.pid=p.pid group by p.pid order by c.ts desc;

我也试过

select p.pid, c.ts from posts p join (select pid, max(ts) from comments) c on c.pid=p.pid order by c.ts desc;

但它没有返回任何结果。

有人可以帮忙吗

4

2 回答 2

0
select p.pid, max(c.ts) as latest_comment
from posts p
left join comments c on c.pid=p.pid 
group by p.pid 
order by latest_comment desc;

您还可以使用c.cidintead ofc.ts来加快 cid 中的性能是评论表的主键。

于 2020-03-07T12:44:20.823 回答
0

您最初的尝试group by很接近。

问题是您需要按组的最大group by时间戳排序,这意味着在子句中使用聚合函数。

在许多数据库中,您的查询会失败,因为排序列不是group by子句的一部分……但在 MySQL 中不是。

select p.pid, max(c.ts) last_ts
from posts p
inner join comments c on c.pid=p.pid 
group by p.pid 
order by max(c.ts) desc;

注意:始终使用显式的标准连接,而不是老式的隐式连接。

于 2020-03-07T11:57:18.710 回答