MySQL查询COUNTing错误

时间:2010-07-07 09:04:36

标签: 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条!

有人可以告诉我这里的逻辑有什么不对吗?

谢谢!

杰克

3 个答案:

答案 0 :(得分:1)

尝试消除GROUP BY约束。然后查看重复行的来源,并修复原始查询。这也将修复您的COUNT。

答案 1 :(得分:1)

尝试:

COUNT(DISTINCT comments.codeid) AS commentcount

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

答案 2 :(得分:1)

尝试从一个简单的查询开始,并从中构建。如果我已正确理解您的结构,则以下查询将为每个代码提交返回正确的注释数:

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

在你的例子中有一些奇怪的列名和连接,这可能导致问题...或者它可能只是一个奇怪的命名方案: - )

例如,您通过将ratingItemscode进行比较,将code.id加入ratingItems.uniqueName。这可能是正确的,但它看起来并不正确。也许它应该更像是:

LEFT JOIN ratingItems ON ratingItems.code_id = code.id

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