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 

从一个基本的工作查询开始,然后添加其他连接。