Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> select count и left join, как получить верный count() ? 
V
    Опции темы
Pfailed
Дата 21.9.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: нет
Всего: 39



Есть такого рода запрос
Код

SELECT clubs.id, clubs.name, clubs.description FROM clubs 
LEFT JOIN topics ON topics.club=clubs.id WHERE clubs.id IN (0, 1, 2, 3) OR clubs.subcategory=18
group by clubs.id
HAVING count(topics.id)>0
ORDER BY clubs.id


Он возвращает 2964 записи. Мне необходимо получить значение 2964 не извлекая сами записи, т.е. попросту воспользоваться COUNT().
Пробую так
Код

SELECT COUNT(clubs.id) FROM clubs
LEFT JOIN topics ON topics.club=clubs.id WHERE clubs.id IN (0, 1, 2, 3) OR clubs.subcategory=18
HAVING count(topics.id)>0


Но такой запрос возвращает число 31761, что не совпадает с 2964.
Подскажите, как организовать правильный запрос?


--------------------
PM MAIL   Вверх
Zloxa
Дата 21.9.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Pfailed, дык а group by зачем убрали?
Код

SELECT count(*)
LEFT JOIN topics ON topics.club=clubs.id WHERE clubs.id IN (0, 1, 2, 3) OR clubs.subcategory=18
group by clubs.id
HAVING count(topics.id)>0


Добавлено через 6 минут и 34 секунды
а вообще если яправильно понял идею:
Код

SELECT count(*)
INNER JOIN topics ON topics.club=clubs.id 
WHERE clubs.id IN (0, 1, 2, 3) OR clubs.subcategory=18


Это сообщение отредактировал(а) Zloxa - 21.9.2009, 13:21


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Pfailed
Дата 21.9.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: нет
Всего: 39



У вас в примерах упущено FROM. Так и задумано? Выдает ошибку
Цитата

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN topics ON topics.club=clubs.id WHERE clubs.id IN (0, 1, 2, 3) OR cl' at line 2


На такой запрос
Код

SELECT count(*) from clubs
INNER JOIN topics ON topics.club=clubs.id 
WHERE clubs.id IN (0, 1, 2, 3) OR clubs.subcategory=18


получаю 30156. Чтобы это число значило даже не знаю.

Цитата

дык а group by зачем убрали?


Потому что такой запрос 
Код

SELECT count(*) from clubs
LEFT JOIN topics ON topics.club=clubs.id WHERE clubs.id IN (0, 1, 2, 3) OR clubs.subcategory=18
group by clubs.id
HAVING count(topics.id)>0


Возвращает некие 2964 числа вместо одного  smile .


--------------------
PM MAIL   Вверх
Zloxa
Дата 21.9.2009, 14:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Pfailed @  21.9.2009,  13:53 Найти цитируемый пост)
Возвращает некие 2964 числа вместо одного

Код

SELECT count(count(*)) from clubs
LEFT JOIN topics ON topics.club=clubs.id WHERE clubs.id IN (0, 1, 2, 3) OR clubs.subcategory=18
group by clubs.id
HAVING count(topics.id)>0

Цитата(Pfailed @  21.9.2009,  13:53 Найти цитируемый пост)
получаю 30156. 


Код

SELECT count(distinct clubs.id) from clubs
INNER JOIN topics ON topics.club=clubs.id 
WHERE clubs.id IN (0, 1, 2, 3) OR clubs.subcategory=18


Код

select count(*) from clubs WHERE (clubs.id IN (0, 1, 2, 3) OR clubs.subcategory=18) and exists (select null from topics  where topics.club=clubs.id )



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Pfailed
Дата 21.9.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: нет
Всего: 39



Zloxa, большое спасибо  smile 
Второй и третий вариант работают, первый выдает ошибку, ну да это уже не важно.

Добавлено через 7 минут и 11 секунд
Вот только недопонял, в этих запросах учитывается условие HAVING count(topics.id)>0? Результат вроде как верный, хотя условия в запросе нет.


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.