当前位置: 首页 > 面试题库 >

MySQL订单发布的最新评论或最新发布

竺承望
2023-03-14
问题内容

我如何对帖子进行排序,以便最近的活动排在最前面?

# Schema not including all info, including FKs
CREATE TABLE post(
   id int unsigned primary key auto_increment,
   msg text,
   created datetime
)ENGINE=InnoDb;

CREATE TABLE comment(
   id int unsigned primary key auto_increment,
   post_id int unsigned,
   msg text,
   created datetime
)ENGINE=InnoDb;

我想按最新顺序对帖子进行排序,其中新帖子显然比以前发布的帖子要新,但是具有最新评论的旧帖子也可以视为最新帖子。

第一次尝试

# Selecting '*' for simplicity in this example
select *
from post p
left join comment c on c.post_id = p.id
group by p.id
order by c.created desc, p.created desc

这不起作用,因为新帖子在带有评论的旧帖子之后排序。

第二次尝试

select *, if(c.id is null, p.created, c.created) as recency
from post p
left join comment c on c.post_id = p.id
group by p.id
order by recency desc

不起作用,因为如果帖子中有多个评论,则 新近度 将匹配第一行的 创建 值,这是最早的评论。

  • 有没有一种方法可以 按p.id分组(因此,每个帖子仅选择一个副本),但是每个组中的排序是按c.date desc进行的,但是查询顺序by是由新近度完成的?我想不出一种方法,而不必在 post上 添加一个 更新的 字段,每当发布回复时我都会写入该字段… __

谢谢!


问题答案:

应该这样做:

SELECT p.id
FROM post p
    LEFT JOIN comment c on c.post_id = p.id
GROUP BY p.id
ORDER BY COALESCE(GREATEST(p.created, MAX(c.created)), p.created) DESC

如果我们假设评论总是早于帖子,则可以简化以下内容:

SELECT p.id
FROM post p
    LEFT JOIN comment c on c.post_id = p.id
GROUP BY p.id
ORDER BY COALESCE(MAX(c.created), p.created) DESC


 类似资料:
  • <php>$last_comments=sp_get_comments("field:*;limit:0,5;order:createtime desc;");</php> <foreach name="last_comments" item="vo"> <div class="comment-ranking-inner"> <i class="fa fa-comment"></i

  • 在maven 3.5.2中,如果依赖项的版本设置为发布或最新,则会显示以下警告: [警告]'依赖项。附属国。“版本” 如果pom的父版本设置为例如,则不会发出此警告: 这是故意的吗,这样我们就可以安全地继续依赖父pom的发布版本? 我们的用例是,我们为大约100个租户托管一个服务,这些租户需要一组公共配置文件和一些依赖关系管理等。这种公共配置在我们的“基本”pom中定义,每个租户的pom将其用作父

  • 请求header POST /v1/activity/{频道id}/official Authorization:Bearer {ACCESS TOKEN} Content-Type:application/json 注: 请将上方的{ACCESS TOKEN}替换为您的ACCESS TOKEN 请将"{频道id}"替换您需要获取的频道id 请求payload { "username"

  • 本文向大家介绍Java13 明天发布(最新最全新特性解读),包括了Java13 明天发布(最新最全新特性解读)的使用技巧和注意事项,需要的朋友参考一下 2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布。 目前,JDK官网上已经可以看到JDK 13的进展,最新版的JDK 13将于2019年9月17日发布。 目前,JDK

  • 问题内容: 我正在尝试获取与我下载的每个帖子相关的最新1或2条评论,有点像instagram一样,因为它们显示每个帖子的最新3条评论,到目前为止,我正在获得帖子和喜欢的计数。 现在,我需要做的就是弄清楚如何获取最新评论,而不是太确定如何处理它,这就是为什么我希望拥有更多专业知识的人可以为我提供帮助! 这是我当前的查询: 基本上,评论与点赞存储在同一表中。 所以表是,然后我有一列存储注释文本,然后“

  • 我正在尝试使用Altova XMLSpy和XQuery1.0为每个客户返回最近的订单。 在SQL中,查询如下所示: 它返回16行,但我无法获得类似于XQuery中的工作。 我尝试了多种不同的代码,我认为我得到的最接近的代码是: 对于XML从MS Access导出的糟糕的标记名表示歉意。 请救命!提前道谢。 编辑:在尝试JoeMFB的解决方案后,当我只需要最近的(或最大日期)时,我会收到每个客户的所