X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> MySQL-запрос
fioru
fioru
Topic Starter сообщение 27.4.2012, 15:09; Ответить: fioru
Сообщение #1


Завсегдатай
*****

Группа: Active User
Сообщений: 508
Регистрация: 30.11.2010
Из: Смоленск
Поблагодарили: 172 раза
Репутация:   37  


День добрый!

Подскажите, пожалуйста, что я делаю не так в запросе:
SELECT e.`id`, e.`name`, COUNT(s.`id`) AS count_starts FROM `events` e LEFT JOIN `starts` s ON e.`id` = s.`event` ORDER BY e.`id` DESC


Есть две таблицы: соревнования events и старты starts
Подразумевается вывод таблицы соревнований с показом количества стартов включенных в данные соревнования, но по выполнению запроса почему то все соревнования для которых не создан не один старт, т.е. по идее COUNT(s.`id`) AS count_starts = 0, почему то вовсе не показываются

Добавил таблицу участников и сделал новый вид запроса...
по результатам вижу что совсем не понимаю в чем проблема

Запрос:
SELECT e.`id`, e.`name`, COUNT(s.`name`) AS count_starts, COUNT(o.`name`) AS count_sportsmens FROM `events` e LEFT JOIN `starts` s ON e.`id` = s.`event` LEFT JOIN `sportsmens` o ON e.`id` = o.`event` ORDER BY e.`id` DESC


Результат:
id name count_starts count_sportsmens
2 Проверка 2 3


То что по идее хотел добиться:
id name count_starts count_sportsmens
2 Проверка 0 1
3 Проверка2 2 1
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
simply_sash
simply_sash
сообщение 27.4.2012, 16:22; Ответить: simply_sash
Сообщение #2


Участник
***

Группа: User
Сообщений: 228
Регистрация: 26.8.2011
Поблагодарили: 94 раза
Репутация:   21  


Первый запрос нужно писать так:
SELECT e.`id`, e.`name`, s.`count_starts` FROM `events` e LEFT JOIN (SELECT `event`, count(`event`) as `count_starts` FROM `starts` group by `event`) s ON e.`id` = s.`event` ORDER BY e.`id` DESC


Сообщение отредактировал simply_sash - 27.4.2012, 16:26


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fioru
fioru
Topic Starter сообщение 27.4.2012, 18:34; Ответить: fioru
Сообщение #3


Завсегдатай
*****

Группа: Active User
Сообщений: 508
Регистрация: 30.11.2010
Из: Смоленск
Поблагодарили: 172 раза
Репутация:   37  


simply_sash, Большое спасибо! Может подскажите как сделать правильно второй запрос
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
simply_sash
simply_sash
сообщение 27.4.2012, 20:41; Ответить: simply_sash
Сообщение #4


Участник
***

Группа: User
Сообщений: 228
Регистрация: 26.8.2011
Поблагодарили: 94 раза
Репутация:   21  


fioru, по аналогии с предыдущим:
SELECT e.`id`, e.`name`, s.`count_starts`, o.`count_sportsmens` FROM `events` e LEFT JOIN (SELECT `event`, count(`event`) as `count_starts` FROM `starts` GROUP BY `event`) s ON e.`id` = s.`event` LEFT JOIN (SELECT `event`, count(`event`) as `count_sportsmens` FROM `sportsmens` GROUP BY `event`) o ON  e.`id` = o.`event` ORDER BY e.`id` DESC


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
fioru
fioru
Topic Starter сообщение 28.4.2012, 13:59; Ответить: fioru
Сообщение #5


Завсегдатай
*****

Группа: Active User
Сообщений: 508
Регистрация: 30.11.2010
Из: Смоленск
Поблагодарили: 172 раза
Репутация:   37  


Большое спасибо, совсем забыл про GROUP BY
Но теперь немного не могу разобраться как применяя GROUP BY получать значения кроме SUM по всем остальным не с первого вхождения, а например второго

Вот запрос:
SELECT r.`time_s` AS `time_s`, r.`time_f` AS `time_f`, r.`time_r` AS `time_r`, r.`scores` AS `scores`, r.`liss` AS `liss`, r.`place` AS `place`, s.`name` AS `name`, s.`team` AS `team`, s.`number` AS `number`, SUM(`scores`) AS `scorestotal` FROM `results` r LEFT JOIN `sportsmens` s ON r.`sportsmen` = s.`id`WHERE s.`group` = 'М10' AND r.`time_s` > 0 GROUP by r.`sportsmen` ORDER BY `liss` DESC, `scores` DESC

Он может быть не идеален но все же...

Есть 3 старта, на данный момент идет проведение 2ого и для вывода используется предварительная сумма за 2 старта, но если рядом попытаться вывести просто scores очки в надежде получить очки за последний старт (2ой из 3) то он выводит только первый!
Как можно обратиться через GROUP чтобы свободные переменные брали значения от 2ого старта
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Недорогие услуги - php/js/mysql/jquery/bootstrap
2 vlads 653 13.12.2017, 21:01
автор: vlads
Открытая тема (нет новых ответов) Стабильный хостинг за 30р в месяц. GNU/Linux, PHP, MySQL, Perl, бэкапы. Помогу перенести сайт.
5 freeax 1544 10.11.2017, 13:15
автор: freeax
Открытая тема (нет новых ответов) Web программирование на С/С++/PHP/MySQL/SQL, высоконагруженные проекты
Есть наработки в области бирж трафика, топов, тизеров, видео cj-тубов
3 DFService 724 1.11.2017, 21:09
автор: DFService
Открытая тема (нет новых ответов) Сделать импорт Mysql
1 azstel 631 9.5.2017, 13:56
автор: serjoga
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыВакансия, Москва, Web-разработчик/Программист (PHP, CMS Битрикс, MySQL)
2 PixelPlus 562 10.4.2017, 15:12
автор: PixelPlus


 



RSS Текстовая версия Сейчас: 15.12.2017, 14:31
Дизайн