使用 SQL 查询文章详情:包含类别、标签、评论和回复

本文将介绍如何使用 SQL 代码查询文章 ID 为 1 的文章详情,除了文章的基本信息,还包括文章类别、文章标签、文章的评论以及评论的回复等数据。

SQL 语句:

SELECT 
    a.*, 
    c.category_name, 
    GROUP_CONCAT(t.tag_name) AS tags, 
    COUNT(cm.id) AS comment_count, 
    GROUP_CONCAT(CONCAT_WS('|', cm.id, cm.content, cm.created_at, 
        COUNT(cr.id), GROUP_CONCAT(CONCAT_WS(',', cr.id, cr.content, cr.created_at)))) AS comments
FROM 
    articles a 
    LEFT JOIN categories c ON a.category_id = c.id 
    LEFT JOIN article_tags at ON a.id = at.article_id 
    LEFT JOIN tags t ON at.tag_id = t.id 
    LEFT JOIN comments cm ON a.id = cm.article_id 
    LEFT JOIN comment_replies cr ON cm.id = cr.comment_id 
WHERE 
    a.id = 1
GROUP BY 
    a.id;

解释:

  • 从文章表 articles 中选择所有字段 (a.*)。
  • 使用 LEFT JOIN 连接文章类别表 categories 和文章标签表 tags,获取文章的类别名和标签名。因为一篇文章可能有多个标签,所以使用 GROUP_CONCAT 函数将标签名合并成一个字符串。
  • 使用 LEFT JOIN 连接评论表 comments 和评论回复表 comment_replies,获取文章的评论和评论的回复。因为一条评论可能有多个回复,所以使用 GROUP_CONCAT 函数将每个回复的信息合并成一个字符串,并用竖线 (|) 分隔评论和回复的信息,用逗号 (,) 分隔每个回复的字段。同时,使用 COUNT 函数统计每篇文章的评论总数。
  • 使用 WHERE 子句选择文章 ID 为 1 的记录,并使用 GROUP BY 子句将结果按文章 ID 分组。

注意:

  • 上述 SQL 语句中的表名、字段名和表结构都是假设的,实际情况可能需要根据具体的数据库表结构进行修改。
  • 该 SQL 语句使用了 GROUP_CONCAT 函数,它在某些数据库中可能需要特殊配置才能使用。
  • 为了更好地理解 SQL 语句,建议您在实际操作中使用数据库管理工具执行查询并查看结果。

原文地址: https://www.cveoy.top/t/topic/npjZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录