1

これは私のデータベーススキーマです:

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 つのコメントがあることがわかります。

つまり、(コメントの数)*(関連付けられたタグの数) のコメントが表示されます。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1