mysql - 获取子项的最佳 SQL 语法

标签 mysql join

我正在创建一个博客系统,我想获取帖子评论。评论有一个多级树,但我只使用一个表来保存所有。

您知道获得 5 条评论和您的 child 评论(回复)的最佳语法吗?

如果我需要将回复的数量限制为 5 个,例如,我如何才能在一个查询中完成?

这是我的表格的打印:blog_comments enter image description here

最佳答案

blog_comments 表上使用自连接。此查询将提供 5 个最新的博客文章以及它们的一个后代 deep 的所有 child 。

SELECT t1.id AS parentID, t2.id AS childID, t1.content AS parentContent,
    t2.content AS childContent
FROM
(
    SELECT id, content
    FROM blog_comments
    ORDER BY creation_date DESC
    LIMIT 5
) t1
INNER JOIN blog_comments t2
    ON t1.id = t2.parent
ORDER BY t1.id, t2.id

更新:

我更喜欢下面的查询,它显示了最近的五篇博客文章,每一篇都在自己的行中,后面是所有子回复。这更类似于您希望在应用层中显示的内容。

SELECT
    CASE WHEN t.childId = -1 THEN 'parent' ELSE 'child' END AS type,
    t.content
FROM
(
    SELECT childId, parentId, content FROM
    (
        SELECT -1 AS childId, id AS parentId, content AS content
        FROM blog_comments
        WHERE parent IS NULL
        ORDER BY creation_date DESC
        LIMIT 5
    ) t1
    UNION ALL
    SELECT t1.id AS childId, t1.parent AS parentId, t1.content AS content
    FROM blog_comments t1
    INNER JOIN
    (
        SELECT id
        FROM blog_comments
        WHERE parent IS NULL
        ORDER BY creation_date DESC
        LIMIT 5
    ) t2
        ON t1.parent = t2.id
) t
ORDER BY t.parentId, t.childId

这是一个正在运行的演示的链接:

SQLFiddle

关于mysql - 获取子项的最佳 SQL 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37957743/

相关文章:

mysql - 简单的mysql查询计数失败

对于其中一个表,不同列上的 2 个表之间的 MySQL 多重内部连接

SQL:如何获取匹配和不匹配的记录

mysql - 如何在 UPDATE 查询中执行三个表 JOIN?

php - HTML5 视频播放列表 - 来自 MYSQL 的文件名

php - mysqli 不能使用 ssh 隧道

mysql - 使用 Wordpress wp_postmeta 表中的数据创建新表

php - 为什么不使用网站内置的 MySQL 用户和权限?

php - where 子句在 codeigniter 中不起作用

sql - 了解涉及 3 个或更多表时 JOIN 的工作原理。 [SQL]