これは私のデータベーススキーマです:
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 つある場合、1 つだけでなく 3 つのコメントがあることがわかります。
つまり、(コメントの数)*(関連付けられたタグの数) のコメントが表示されます。
この問題を解決するにはどうすればよいですか?