MySQL объединяет выходные данные

#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. Спасибо, Джон! Работает идеально. Очень признателен.