IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   MYSQL: Неправильный подсчет COUNT (https://www.imho.ws/showthread.php?t=69269)

Psionic Vision 24.09.2004 22:51

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

Причем, в некоторых строках результат правильный, в некоторых - нет. В чем дело, не понятно...

is_absent 25.09.2004 08:41

так таблички-то дай посмотреть....

Psionic Vision 25.09.2004 17:40

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


is_absent 26.09.2004 12:20

ну с этими данными твой запрос правильно считается... может быть есть смысл показать еще пару строк, которые неправильно обрабатываются?

и если не трудно, расскажи, что должен посчитать этот запрос

Psionic Vision 26.09.2004 17:10

Вот этот пример считается не правильно:

Код:

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


Psionic Vision 26.09.2004 22:01

Все, спасибо 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

mxdmg 02.10.2004 11:56

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

Psionic Vision 02.10.2004 17:11

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

mxdmg 02.10.2004 23:14

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
:idontnow:

mxdmg 03.10.2004 22:16

почемуто по моему запросу сумма = сумма голосов * кол-во комментариев


Часовой пояс GMT +4, время: 08:58.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.