Выберите отдельные значения из результатов group_concat

Я учусь, мне интересно изучать MySQL, и я создаю сайт с фильмами. Я был бы очень признателен, если бы кто-нибудь мог мне здесь помочь.

Итак, я сделал такой запрос:

SELECT Movie.idMovie,MovieTitle,Description,
group_concat(ActorName) AS ActorName,group_concat(DirectorName)
FROM EAD_ASSIGNMENT.Movie 
INNER JOIN EAD_ASSIGNMENT.Movie_Actor
ON EAD_ASSIGNMENT.Movie.idMovie = EAD_ASSIGNMENT.Movie_Actor.idMovie
INNER JOIN EAD_ASSIGNMENT.Actor
ON EAD_ASSIGNMENT.Movie_Actor.idActor = EAD_ASSIGNMENT.Actor.idActor
INNER JOIN EAD_ASSIGNMENT.Movie_Director
ON EAD_ASSIGNMENT.Movie.idMovie = EAD_ASSIGNMENT.Movie_Director.idMovie
INNER JOIN EAD_ASSIGNMENT.Director
ON EAD_ASSIGNMENT.Movie_Director.idDirector =
EAD_ASSIGNMENT.Director.idDirector
WHERE Movie.idMovie = 1;

Стол, который я получил, выглядел так

1 || Frozen || A magical movie || Idina Menzel,Kristen Bell || Jennifer Lee, Chris Buck

Затем я запросил WHERE Movie.idMovie = 2

К моему шоку, у меня получилось вот что (проблема в последней ячейке),

2 || Starwars || A very nice movie || Carrie Fisher,Harrison Ford || J.J. Abrams,J.J. Abrams

Итак, проблема в том, что group_concat работает не так, как я думал. В этом случае для первого запроса это выглядело нормально, но что касается второго запроса, он рассматривал 1 значение как группу и сгруппировал его с самим собой (угадывая)? Есть ли способ сгруппировать результаты, если их больше 1 с символом «,» между ними, и если есть только 1 результат, ничего не делать?


person ExPlOiD    schedule 03.01.2016    source источник


Ответы (1)


Итак, я понял, что могу исправить это, включив функцию DISTINCT, чтобы запросить группу, только если они разные. Правильный запрос:

SELECT Movie.idMovie,MovieTitle,Description,
group_concat(DISTINCT ActorName) AS ActorName,group_concat(DISTINCT DirectorName)
FROM EAD_ASSIGNMENT.Movie 
INNER JOIN EAD_ASSIGNMENT.Movie_Actor
ON EAD_ASSIGNMENT.Movie.idMovie = EAD_ASSIGNMENT.Movie_Actor.idMovie
INNER JOIN EAD_ASSIGNMENT.Actor
ON EAD_ASSIGNMENT.Movie_Actor.idActor = EAD_ASSIGNMENT.Actor.idActor
INNER JOIN EAD_ASSIGNMENT.Movie_Director
ON EAD_ASSIGNMENT.Movie.idMovie = EAD_ASSIGNMENT.Movie_Director.idMovie
INNER JOIN EAD_ASSIGNMENT.Director
ON EAD_ASSIGNMENT.Movie_Director.idDirector =
EAD_ASSIGNMENT.Director.idDirector
WHERE Movie.idMovie = 1;

Сообщите мне, есть ли способ улучшить этот запрос, на данный момент это мне помогает. :)

person ExPlOiD    schedule 03.01.2016