SQL 查询文章详情:包含类别、标签、评论和回复
使用 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 著作权归作者所有。请勿转载和采集!