Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
РЕБЯТА, ПОМОГИТЕ!!! (Иван) 09/03/2006 - 15:01:33
      Re: РЕБЯТА, ПОМОГИТЕ!!! (Dinky) 09/03/2006 - 18:33:31
      Re: РЕБЯТА, ПОМОГИТЕ!!! (Иван) 10/03/2006 - 00:36:57
      Re: РЕБЯТА, ПОМОГИТЕ!!! (Dinky) 10/03/2006 - 01:21:04
      Re: РЕБЯТА, ПОМОГИТЕ!!! (Dinky) 10/03/2006 - 01:22:04
      Re: РЕБЯТА, ПОМОГИТЕ!!! (Иван) 10/03/2006 - 15:04:18

> Original message text:
> From: Иван - 09/03/2006 - 15:01:33
> Subject:РЕБЯТА, ПОМОГИТЕ!!!
> -----------------
> Хочу разобраться сейчас с одной задачкой, распишу все по подробнее. Кто хорошо во всем разбирается сразу смотрите главное внизу.
>
>
> Таблицы:
> mp3
> singers
> top
> downloads
>
> Задача не сложная - сделать выборку, найти в top максимальное место, в downloads количество скачиваний, взять и singers имя исполнителя.
>
> mp3.* - вся инфа по песне
> s.name as singer_name - исполнитель песни
> MAX(top.pos) - максимальная позиция песни
> COUNT(d.id) - находим кол-во загрузок
>
> Все данные надо получать вместе одним запросом для возможность сортировки по полям.
>
> SELECT mp3.*, s.name as name, MAX(top.pos) as max, COUNT(d.id) as rs FROM mp3 LEFT JOIN singers s ON s.id=mp3.singer_id LEFT JOIN top ON top.track_id=mp3.id LEFT JOIN downloads d ON d.track_id=mp3.id GROUP BY mp3.id LIMIT 0, 30
>
> Теперь сама проблема - соединение таблиц, делаю все через LEFT JOIN (в первой можно и INNER JOIN использовать т.к. любая песня должна иметь исполнителя, а вот остальные могут и не иметь записей, итак самое главное FROM )
>
> mp3 LEFT JOIN singers s ON s.id=mp3.singer_id (соединяем mp3 с singers)
> LEFT JOIN top ON top.track_id=mp3.id (соединяем mp3 с top)
> LEFT JOIN downloads d ON d.track_id=mp3.id (соединяем mp3 с downloads )
>
> Проблема в том, что explain показывает что из mp3 идет выборка всех записей и сопоставление, что создает большую нагрузку, наличие LIMIT ничего не меняет. Решене проблемы думаю простое, и все из-за отсутствия знания основ, надо один раз и на всегда разобраться. Прошу на мануалы ссылки не давать, вчера читал сам не и разобрался.
>
>


From: Dinky - 09/03/2006 - 18:33:31
Subject:РЕБЯТА, ПОМОГИТЕ!!!
-----------------
почему бы не поступить проще?
первым запросом взять TOP 30, получить id-шники, а потом в цикле выбрать инфо по каждой из тех таблиц, что по left join ;)
Три десятка простых запросов пролетят быстрее чем один сложный, особенно, если будет много желающих сделать это одновременно...

--
Dmitry


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
26891



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |