SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.11.2009 19:12:59

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Подсчёт записей в нескольких таблицах одним запросом

Чё-то споткнулся со следующей ситуацией.

Есть 3 таблицы: одна главная и 2 связные. Нужно посчитать сколько данных находится в связных таблицах по каждой записи главной. Не могу состряпать запрос, по первой таблице считает нормально, а по второй - хрень какую-то считает.

Собссна юзаю запрос:

Код:

SELECT 
  `routes`.`id` , 
  `routes`.`name` , 
  `routes`.`credits` , 
  `routes`.`all_signs` , 
  COUNT( `users`.`id` ) AS `users` , 
  COUNT( `routes_signs`.`sign_id` ) AS `signs` 
FROM `routes` 
LEFT JOIN `users` ON `users`.`route_id` = `routes`.`id` 
LEFT JOIN `routes_signs` ON `routes_signs`.`route_id` = `routes`.`id` 
GROUP BY `routes`.`id` 
ORDER BY `users` DESC

Пробовал "GROUP BY `users`.`route_id`, `routes_signs`.`route_id`" - результат тот же.

Или без подзапросов или разбиения запроса на части не обойтись?

ЗЫ Не дружу с разницей LEFT|RIGHT|INNER|OUTER, может решение как раз там...


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#2 05.11.2009 13:44:51

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Подсчёт записей в нескольких таблицах одним запросом

Буквально на прошлой неделе был этот же вопрос smile

Попробуйте оставить два объединения, но убрать COUNT, тогда становится
понятно, почему считает плохо — у Вас получается произведение строк,
которое Вы и просчитываете. Подзапросы Вас спасут. Ну или COUNT(DISTINCT id)
если уникальные строки устроят.

Неактивен

 

#3 05.11.2009 15:29:56

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Подсчёт записей в нескольких таблицах одним запросом

paulus написал:

Буквально на прошлой неделе был этот же вопрос smile

Да, я видел темку тут недалеко, но там решением было применение UNION и запрос какой-то перекрученый и страшный получился))

paulus написал:

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

Глянул, действительно. Я так понимаю, это всегда актуально при группировке данных по нескольким таблицам?

paulus написал:

Подзапросы Вас спасут.

Ну эти звери вроде любую проблему решат)))

paulus написал:

Ну или COUNT(DISTINCT id) если уникальные строки устроят.

Таки устроят, и таки помогло, пасиба smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson