我擁有簡單的雜誌,並且擁有包含帖子,評論,類別等的表格。列出單個類別時,我希望獲得評論總數每個帖子在一個列表中,但這個數字是錯誤的,它讓我瘋狂。請注意,單個帖子可以分爲多個類別。如何正確計算table2中與table1中的項目相關的行,其中的子句與table1無關
這裏有
posts
id | title | categoryid | content | published
---------------------------------------------
comments
id | postid | comment
---------------------
category_rel
postid | categoryid
-------------------
categories
id | category
-------------
我用下面的SQL簡單的表結構(簡化爲這個例子):
SELECT posts.*, categories.id AS categoryid,
categories.category AS categorytitle,
COUNT(comments.postid) AS CNT
FROM posts
LEFT JOIN comments ON posts.id = comments.postid
INNER JOIN category_rel ON posts.id = category_rel.postid
INNER JOIN categories ON category_rel.categoryid = categories.id
WHERE posts.published=1
GROUP BY posts.id;
這種說法是給我的錯誤的結果,sometning像它的累積類別的數量帖子是成員並且與實際的評論數量相乘。如果我刪除SQL類別一部分(這是不好的,我需要的類ID和名稱),我收到正確的價值觀:
SELECT posts.*, COUNT(comments.postid) AS CNT
FROM posts
LEFT JOIN comments ON posts.id = comments.postid
WHERE posts.published=1
GROUP BY posts.id;
更具體: 一個職位有1條評論,這是7個成員類別。價值CNT將去7,而不是1.
任何想法如何改變第一個SQL來獲得正確的值?
GROUP BY posts.id =是否正確?可能你需要GROUP BY comments.postid? –
不可以。按comments.postid分組時不會爲每個帖子獲得正確的值。或者可能會得到所有相同的值 –