2010-07-07 82 views
0

好吧,我認識到,其實它更可能是我的邏輯的票錯;)MySQL查詢計數錯誤

因此,這裏是我的查詢:

SELECT 
    code.id AS codeid, code.title AS codetitle, code.summary AS codesummary, code.author AS codeauthor, code.date, 
    code_tags.*, 
    tags.*, 
    users.firstname AS authorname, 
    users.id AS authorid, 
    ratingItems.*, FORMAT((ratingItems.totalPoints/ratingItems.totalVotes), 1) AS rating, 
    GROUP_CONCAT(tags.tag SEPARATOR ', ') AS taggroup, 
    COUNT(comments.codeid) AS commentcount 
FROM 
    code 
    join code_tags on code_tags.code_id = code.id 
    join tags on tags.id = code_tags.tag_id 
    join users on users.id = code.author 
    left join comments on comments.codeid = code.id 
    left join ratingItems on uniqueName = code.id 
GROUP BY code_id 
ORDER BY date DESC 
LIMIT 0, 15 

對不起有相當多的「膨脹的' 在那裏面。我遇到的問題是commentcount或(COUNT(comments.codeid) AS commentcount) - 我想要統計代碼提交的評論總數。以前,它工作正常,但我重新調整了我的MySQL語法,現在它停止工作:(

在數據庫中只有2個code提交有註釋。正確返回的第一個結果表明它有超過0評論,但報告它作爲具有commentcount「2」的時候,其實它只有1

第二提交ALSO只有一個評論,不過,它告訴我,它有4個!

有人能告訴我我的邏輯有什麼問題嗎?

謝謝!

插孔

+0

什麼是code_id?我看到code.id和codeid,但我看不到Code_id的來源。 – Borealid 2010-07-07 09:07:34

+0

我猜測,顯示爲2條評論的標籤有2個標籤,而顯示爲4條評論的標籤有4個標籤。是對的嗎? – 2010-07-07 09:08:16

回答

1

嘗試之一:

COUNT(DISTINCT comments.codeid) AS commentcount 

(SELECT COUNT(*) FROM comments WHERE comments.codeid = code.id) AS commentcount 
+0

謝謝! 「COUNT(DISTINCT [...]'完美地完成了這個訣竅。 – Jack 2010-07-07 13:42:06

1

嘗試消除GROUP BY約束。然後查看重複行來自哪裏,並修復原始查詢。這也會修復你的COUNT。

1

開始嘗試用一個簡單的查詢,並從建立。如果我理解正確的結構,下面的查詢將返回的意見正確數量爲每個提交代碼:

SELECT code.*, COUNT(code.id) AS comment_count 
FROM code 
JOIN comments ON comments.codeid = code.id 
GROUP BY(code.id); 

有一些奇怪的看着列名和連接在你的榜樣,這可能是導致問題…或者它可能只是:-)

例如一個奇怪的命名方案,你通過與ratingItems.uniqueName比較code.id加入ratingItemscode。這可能是正確的,但它看起來不太合適。也許它應該更像:

LEFT JOIN ratingItems ON ratingItems.code_id = code.id 

從一個基本的工作查詢開始,然後添加其他連接。