#mysql
#mysql
Вопрос:
Я совсем новичок, когда дело доходит до MySQL. Мне трудно найти это, но я уверен, что решение довольно простое. У меня есть следующие таблицы:
Фильмы
- movie_id
- movie_title
con_genres (таблица соединений между 2 другими)
- movie_id
- genre_id
жанры
- genre_id
- Имя
Я пробовал разные запросы, но продолжаю получать такие результаты
1 | Avatar | Sci-fi
1 | Avatar | Fantasy
2 | Matrix | Sci-fi
2 | Matrix | Fantasy (this one is non existent)
Но я хочу получить следующие результаты
1 | Avatar | Sci-fi, Fantasy
2 | Matrix | Sci-fi
Каков наилучший подход для получения этого с помощью 1 запроса?
Ответ №1:
Не запускал его, но это должно сработать:
SELECT m.movie_id, MIN(m.movie_title), GROUP_CONCAT(g.name)
FROM movies m
LEFT JOIN con_genres c ON c.movie_id = m.movie_id
LEFT JOIN genres g ON c.genre_id = g.genre_id
GROUP BY m.movie_id
Идея здесь состоит в том, чтобы объединить три таблицы (что дало бы что-то вроде результата вашего первого примера), сгруппировать по идентификатору фильма (очевидно, поскольку нам нужна только одна строка для каждого фильма) и использовать GROUP_CONCAT
для выбора всех названий жанров для каждого фильма в одной строке, разделенной запятыми.
Комментарии:
1. Спасибо, Джон! Работает идеально. Очень признателен.