Xrist1An
@Xrist1An
задаю глупые вопросы

Как сократить три запроса в один?

У меня 3 таблицы:

music (основная)
--
id, path, duration... и т.д.

genre (тут идут названия жанров и их id)
---
genre_id
genre_title

xref_music_genre (а тут отношения id песен из основной таблицы к названию жанра из второй таблицы)
---
music_id
genre_id


Это все нужно для того, чтобы было проще искать какую-нибудь песню по ее жанру.

Но я вообще не понимаю как теперь рационально извлекать песню по жанру, используя сразу 3 таблицы.

У меня на ум приходит только такой вариант:

Берем все id песен из таблицы отношений, в которых есть жанр trance

SELECT music_id FROM xref_music_genre WHERE genre_title = 'trance'


Итак, у меня есть все id песен. Теперь надо по каждому id выполнить запрос и вытащить из основной таблицы песню. Это уже цикл и куча-куча запросов в этом цикле для каждого id. Ведь есть какой-нибудь более рациональный вариант? Как эту задачу решить с помощью 1ого запроса? Не могли бы вы привести пример такого запроса?

Заранее спасибо!
  • Вопрос задан
  • 263 просмотра
Решения вопроса 1
select m.* from music m, genre g, xref_music_genre mg
where m.id = mg.music_id
and g.genre_id = mg.genre_id
and g.genre_title = 'rock'
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SELECT m.*, GROUP_CONCAT(g.genre_title ORDER BY g.genre_title ASC SEPARATOR'; ') as genre_titles
FROM music m
INNER JOIN xref_music_genre mg ON mg.music_id = m.id
INNER JOIN genre g ON g.genre_id = mg.genre_id
GROUP BY m.id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы