| imho.ws |
![]() |
|
|
|
# 1 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
MYSQL: Неправильный подсчет COUNT
Проблема с запросом: неправильно подсчитывает переменныю cc
SELECT DISTINCT na.articleid,na.articletitle,na.userid,COUNT(nf.favoriteid) AS ca,COUNT(nc.commid) as cc FROM neolit_articles na LEFT JOIN neolit_comments nc ON (nc.articleid=na.articleid) LEFT JOIN neolit_favorites nf ON (nf.articleid=na.articleid) WHERE nf.favoriteid IS NOT NULL OR nc.commid IS NOT NULL GROUP BY nf.articleid,nc.commid Причем, в некоторых строках результат правильный, в некоторых - нет. В чем дело, не понятно... |
|
|
|
|
# 3 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
OK.
Я привожу только одну строку из первой таблицы и соответствующие ей - из других. Код:
neolit_articles articleid articletitle 87 Евдоха neolit_favorites favoriteid userid articleid .... (есть еще поля но не важно) 23 9 87 44 10 87 neolit_comments commid userid articleid .... (есть еще поля но не важно) 19 68 87 48 18 87 |
|
|
|
|
# 4 |
|
::VIP::
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417
![]() ![]() ![]() |
ну с этими данными твой запрос правильно считается... может быть есть смысл показать еще пару строк, которые неправильно обрабатываются?
и если не трудно, расскажи, что должен посчитать этот запрос
__________________
Nunc est bibendum |
|
|
|
|
# 5 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Вот этот пример считается не правильно:
Код:
neolit_articles articleid articletitle 422 Сеть neolit_favorites favoriteid userid articleid .... (есть еще поля но не важно) 23 129 422 neolit_comments commid userid articleid .... (есть еще поля но не важно) 26 95 422 27 155 422 28 7 422 29 18 422 30 22 422 31 155 422 Код:
neolit_articles articleid articletitle 252 Тестовое Название neolit_favorites favoriteid userid articleid .... (есть еще поля но не важно) [СООТВЕТСТВУЮЩИХ СТРОК НЕ НАЙДЕНО] neolit_comments commid userid articleid .... (есть еще поля но не важно) 26 9 252 27 68 252 |
|
|
|
|
# 6 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Все, спасибо Ceo, запрос я подправил, теперь все работает
![]() is_absent Дело было, оказывается, в неправильном GROUP BY Вот правильный запрос: SELECT DISTINCT na.articleid,na.articletitle,na.userid,COUNT(DISTINCT nf.fa voriteid) AS ca,COUNT(DISTINCT nc.commid) as cc FROM neolit_articles na LEFT JOIN neolit_comments nc ON (nc.articleid=na.articleid) LEFT JOIN neolit_favorites nf ON (nf.articleid=na.articleid) WHERE nf.favoriteid IS NOT NULL OR nc.commid IS NOT NULL GROUP BY na.articleid |
|
|
|
|
# 7 |
|
Guest
Сообщения: n/a
|
neo , КАК? у меня такаяже проблема\ есть два коунт и сум =(
и неправильно выводит подсчёты . поделись! неделю уже мучаюсь neo, я попробовал DISTINCT не получаеться =( SELECT DISTINCT dacms_user.name, dacms_news.id,avtor, dacms_comments.aid,dacms_rating.raid,rball, COUNT(dacms_comments.aid), COUNT(dacms_rating.raid), SUM(dacms_rating.rball) FROM dacms_news left outer join dacms_user on dacms_user.name=dacms_news.avtor LEFT JOIN dacms_comments ON dacms_comments.aid = dacms_news.id LEFT JOIN dacms_rating ON dacms_rating.raid = dacms_news.id GROUP BY dacms_news.id |
|
|
# 8 |
|
Full Member
Регистрация: 05.02.2002
Адрес: Underground
Сообщения: 2 110
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
SELECT DISTINCT
dacms_user.name, dacms_news.id,avtor, dacms_comments.aid,dacms_rating.raid,rball, COUNT(DISTINCT dacms_comments.aid), COUNT(DISTINCT dacms_rating.raid), SUM(dacms_rating.rball) FROM dacms_news left outer join dacms_user on (dacms_user.name=dacms_news.avtor) LEFT JOIN dacms_comments ON (dacms_comments.aid = dacms_news.id) LEFT JOIN dacms_rating ON (dacms_rating.raid = dacms_news.id) GROUP BY dacms_news.id |
|
|
|
|
# 9 |
|
Guest
Сообщения: n/a
|
fanks =)
подправил запрос чуть чуть =) и всё ок! DISTINCT насколько я не выводит одинаковые записи из бд? [ложка дёгтя] но у меня один голосовавший оставил оценку десять а мне сумму всех голосов выводит 180 =( вот сам запрос SELECT DISTINCT dacms_user.name, dacms_news.id,avtor, COUNT(DISTINCT dacms_comments.id) as comments_sount, COUNT(DISTINCT dacms_rating.rid) as rating_count, SUM( dacms_rating.rball) as rating_sum FROM dacms_news left outer join dacms_user on (dacms_user.name=dacms_news.avtor) LEFT JOIN dacms_comments ON (dacms_comments.aid = dacms_news.id) LEFT JOIN dacms_rating ON (dacms_rating.raid = dacms_news.id) GROUP BY dacms_news.id а когда голос(оценка) равен одному то сумма=18
|