You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求MySQL查询语句:实现论坛帖子按置顶及最新回复排序展示

解决论坛帖子分组排序的MySQL查询方案

没问题,我帮你搞定这条完全匹配需求的MySQL查询语句,先直接上可运行的代码,再给你拆解每部分的逻辑:

SELECT 
    id, 
    topicid, 
    parentid, 
    title, 
    content, 
    create_time, 
    is_top,
    -- 计算每个topic组的最新帖子时间,用于非置顶组排序
    MAX(create_time) OVER (PARTITION BY topicid) AS latest_group_time
FROM 
    your_post_table_name  -- 记得替换成你实际的表名
ORDER BY 
    -- 置顶组优先展示(is_top为1的排在最前面)
    is_top DESC,
    -- 非置顶组按组内最新帖子时间倒序,最新有回复的组靠前
    latest_group_time DESC,
    -- 组内先排parentid为NULL的主帖,再按parentid升序排列回帖
    parentid IS NULL DESC,
    parentid ASC;

逻辑拆解,对应你的每一条需求:

  • 相同topicid归为一组:通过PARTITION BY topicid窗口函数分组计算每个组的最新时间,排序时先按组的优先级(置顶/最新时间)整体排列,再处理组内顺序,完美实现“组”的聚合展示效果。
  • 组内parentid升序,NULL值始终在前:用parentid IS NULL DESC让NULL值的主帖排在最前面(MySQL中布尔值TRUE为1,FALSE为0,降序后NULL项自然靠前),再配合parentid ASC让回帖按parentid从小到大有序排列。
  • 置顶的组优先展示:is_top DESC直接让标记为置顶(假设is_top取值1为置顶,0为非置顶)的组排在所有非置顶组之前,满足置顶优先级要求。
  • 非置顶组按组内最新帖子时间排序:latest_group_time DESC确保非置顶组里,最近有新回复(组内最新帖子时间最晚)的组优先展示,正好实现“收到回复就顶到顶部”的核心需求。

内容的提问来源于stack exchange,提问作者Farliesz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:25:53