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

MySQL邻接列表模式下,获取带分页的树形评论(含最新一级评论及全量二级回复)

MySQL 树形邻接列表评论查询实现

需求说明

获取10条最新的一级评论(parentId IS NULL且level = 1),同时拉取这些一级评论对应的所有二级回复(parentId不为空且level = 2)。

实现方案

方案1:分两次查询(便于前端单独处理层级)

首先查询最新的10条一级评论:

SELECT id, content, createTime, parentId, level
FROM comments
WHERE parentId IS NULL AND level = 1
ORDER BY createTime DESC
LIMIT 10;

然后基于上述一级评论的ID,查询对应的所有二级回复:

SELECT c.id, c.content, c.createTime, c.parentId, c.level
FROM comments c
INNER JOIN (
    -- 复用一级评论的筛选逻辑,确保只关联目标评论的回复
    SELECT id
    FROM comments
    WHERE parentId IS NULL AND level = 1
    ORDER BY createTime DESC
    LIMIT 10
) p ON c.parentId = p.id
WHERE c.level = 2;

方案2:一次性返回所有数据(带类型标记)

如果需要在同一条SQL中获取一级评论和对应的二级回复,可以用UNION ALL合并结果,并添加标记字段区分层级:

-- 先取10条最新一级评论
SELECT 
    id, content, createTime, parentId, level, '一级评论' AS comment_type
FROM comments
WHERE parentId IS NULL AND level = 1
ORDER BY createTime DESC
LIMIT 10

UNION ALL

-- 再取对应一级评论的二级回复
SELECT 
    c.id, c.content, c.createTime, c.parentId, c.level, '二级回复' AS comment_type
FROM comments c
INNER JOIN (
    SELECT id
    FROM comments
    WHERE parentId IS NULL AND level = 1
    ORDER BY createTime DESC
    LIMIT 10
) p ON c.parentId = p.id
WHERE c.level = 2
-- 二级回复按所属一级评论ID和创建时间排序
ORDER BY parentId, createTime ASC;

注意事项

  • 确保createTime字段有索引,否则大表中ORDER BY会导致性能问题
  • 如果需要更灵活的树形查询(比如三级及以上),邻接列表模式需要多次关联或递归查询,MySQL 8.0+支持WITH RECURSIVE递归语法,可进一步扩展

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:36:22