gpt4 book ai didi

mysql - 需要帮助创建 1 个 MySQL 查询

转载 作者:行者123 更新时间:2023-11-29 17:35:17 25 4
gpt4 key购买 nike

我正在创建一个留言板。当某个主题得到回复时,整个主题(具有 topicid 的所有行)必须被移至论坛顶部。固定主题应始终首先显示,然后是具有最新发布日期的主题,因为它们在收到回复时会被弹出到顶部。

这是包含帖子的表格的图片。

DB Table before query
我需要 1 个查询来执行以下操作:

  1. 将所有 topicid 分组在一起(我们称之为“组”);
  2. 在每个组内按parentid升序对行进行排序,但NULL始终排在前面;
  3. 首先显示“固定”的群组
  4. 然后是最先显示“最新”帖子的群组

查询应给出以下结果

Results of the query

最佳答案

我认为这个查询会做你想要的。

SELECT * 
FROM messages m
ORDER BY IF(pinned='yes','9999-12-31 23:59:59', (SELECT MAX(date) FROM messages m2 WHERE m2.topicid = m.topicid)) DESC,
topicid, IFNULL(parentid, 0)

排序的第一部分确保首先对固定的群组进行排序,然后是具有最新帖子的群组。它通过选择固定组时的最大可能日期来实现此目的,否则选择该组中帖子的最新日期并按该值降序排序。然后,第二部分按 topicid 对这些帖子进行排序,最后一部分按 Parentid 排序。为了确保具有 NULL Parentid 的帖子首先排序,我们在 Parentid 上使用 IFNULL 子句,以在 Parentid 为 NULL 时将排序值设置为 0。

我创建了一个SQLFiddle来证明这一点。

编辑 此更新的查询还将按最新日期而不是仅按 topicid 对固定主题进行排序。它通过在固定帖子的日期上添加 1000 年来实现这一点,从而确保固定帖子排序在非固定帖子之前,同时也保留固定帖子之间的顺序。

SELECT * 
FROM messages m
ORDER BY (SELECT MAX(IF(pinned='yes', date + interval 1000 year, date))
FROM messages m2
WHERE m2.topicid = m.topicid) DESC,
topicid, ifnull(parentid, 0)

这是更新的 SQLFiddle来演示。

关于mysql - 需要帮助创建 1 个 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50320596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com