嗯,我意识到事实上我的逻辑更可能是错误的;)
所以这是我的疑问:
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 :(得分: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);
在你的例子中有一些奇怪的列名和连接,这可能导致问题...或者它可能只是一个奇怪的命名方案: - )
例如,您通过将ratingItems
与code
进行比较,将code.id
加入ratingItems.uniqueName
。这可能是正确的,但它看起来并不正确。也许它应该更像是:
LEFT JOIN ratingItems ON ratingItems.code_id = code.id
从基本的工作查询开始,然后添加其他连接。