Mysql 如何处理这个复杂的查询?
这是我的数据库架构:Mysql 如何处理这个复杂的查询?,mysql,sql,database,Mysql,Sql,Database,这是我的数据库架构: Post: id title body date Tag: id title Post_Tag: id id_post id_tag Comment: id id_post body date 这是一个查询,用于显示包含所有相关标记和评论编号的帖子 SELECT p.ID, p.title, p.body, p.c_date, GROUP_CONCAT(DISTINCT CONCAT_WS('|', CAST(t.ID AS
Post:
id
title
body
date
Tag:
id
title
Post_Tag:
id
id_post
id_tag
Comment:
id
id_post
body
date
这是一个查询,用于显示包含所有相关标记和评论编号的帖子
SELECT
p.ID,
p.title,
p.body,
p.c_date,
GROUP_CONCAT(DISTINCT CONCAT_WS('|', CAST(t.ID AS CHAR), t.title) SEPARATOR ';') AS tags,
COUNT(c.ID) AS comments
FROM Post p
LEFT JOIN Comment c ON p.ID = c.id_post
LEFT JOIN Post_Tag pt ON p.ID = pt.id_post
LEFT JOIN Tag t ON pt.id_tag = t.ID
GROUP BY p.ID, p.title, p.body, p.c_date
ORDER BY p.c_date DESC
问题是评论的编号错误
如果帖子有3个标签,有1条评论,那么它会告诉我有3条评论,而不仅仅是1条
因此,它向我显示(注释编号)*(关联标签编号)注释
如何解决此问题?使用计数(不同的c.ID)
而不是计数(c.ID)
:
使用计数(不同的c.ID)
代替计数(c.ID)
:
COUNT(DISTINCT c.ID)AS comments
有效吗?COUNT(DISTINCT c.ID)AS comments
有效吗?
SELECT
p.ID,
p.title,
p.body,
p.c_date,
GROUP_CONCAT(DISTINCT CONCAT_WS('|',
CAST(t.ID AS CHAR),
t.title) SEPARATOR ';') AS tags,
COUNT(DISTINCT c.ID) AS comments
FROM Post p
LEFT JOIN Comment AS c ON p.ID = c.id_post
LEFT JOIN Post_Tag AS pt ON p.ID = pt.id_post
LEFT JOIN Tag AS t ON pt.id_tag = t.ID
GROUP BY p.ID,
p.title,
p.body,
p.c_date;
ORDER BY p.c_date DESC