2010-09-05 5 views
3

Ну, может, но я не могу запросить;)MySQL COUNT не может рассчитывать

Вот мой запрос:

SELECT code.id AS codeid, code.title AS codetitle, code.summary AS codesummary, code.author AS codeauthor, code.date, code.challengeid, ratingItems.*, FORMAT((ratingItems.totalPoints/ratingItems.totalVotes), 1) AS rating, code_tags.*, tags.*, users.firstname AS authorname, users.id AS authorid, GROUP_CONCAT(tags.tag SEPARATOR ', ') AS taggroup, 
    COUNT(DISTINCT 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 
WHERE `code`.`approved` = 1 
GROUP BY code_id 
ORDER BY date desc 
LIMIT 15 

Важным направлением является второй один - тот, который я имею отступ. Я прошу указать COUNT количество комментариев для определенного сообщения, но оно не возвращает правильный номер. Например, что-то с двумя комментариями вернет «1». Что-то с 8 комментариями двух разных авторов все равно вернет «1» ...

Любые идеи?

Спасибо!

Джек

EDIT: забыл упомянуть. Когда я удаляю часть DISTINCT, что-то с 8 комментариями от двух авторов возвращает «28». К сожалению, я не эксперт MySQL и на самом деле не понимаю, почему это возвращение, что :(

ответ

4

Вы группа по code.id и в каждой группе вы рассчитывать (DISTINCT comments.codeid), но comments.codeid = code.id, как определено в JOIN, поэтому вы всегда получите 1 .

Вы должны рассчитывать на какой-то другой области на комментарии ... если есть первичный суррогатный ключ, это путь COUNT(comments.commentid).

Кроме того, если комментарии в каждой группе, как известно, отличный, простой COUNT(*) должен работать.

+0

Brilliant, thank s Yacoder - теперь я использую 'COUNT (DISTINCT comments.id)', который отлично работает :) – Jack

Смежные вопросы