嗯,我意识到,事实上,我的逻辑更有可能是错误的;
下面是我的疑问:
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语法,现在它停止工作了:
数据库中只有两个有注释的code提交。这些结果中的第一个正确地标识了它有超过0的注释,但是报告它在commentcount中有'2‘,而实际上它只有一个。
第二个提交的也只有一个评论,但是,它告诉我它有4个!
有人能告诉我我的逻辑出了什么问题吗?
谢谢!
杰克
发布于 2010-07-07 09:19:26
试一试:
COUNT(DISTINCT comments.codeid) AS commentcount或
(SELECT COUNT(*) FROM comments WHERE comments.codeid = code.id) AS commentcount发布于 2010-07-07 09:08:56
尝试通过约束消除组。然后查看重复行的来源,并修复原始查询。这也能解决你的问题。
发布于 2010-07-07 09:52:48
尝试从一个简单的查询开始,并以此为基础进行构建。如果我正确理解了您的结构,下面的查询将为每次提交的代码返回正确的注释数:
SELECT code.*, COUNT(code.id) AS comment_count
FROM code
JOIN comments ON comments.codeid = code.id
GROUP BY(code.id);在您的示例中有一些看起来很奇怪的列名和联接,这可能会导致…问题或者可能只是一个奇怪的命名方案:-)
例如,通过比较ratingItems和code,您可以将code.id与ratingItems.uniqueName连接到ratingItems.uniqueName中。这也许是对的,但看上去不太对。也许它应该更像是:
LEFT JOIN ratingItems ON ratingItems.code_id = code.id从一个基本的工作查询开始,然后添加其他联接。
https://stackoverflow.com/questions/3193323
复制相似问题