Скажем, у нас есть 2 таблицы
#film_info
[
movieID
movieValue1
movieValue2
]
#actor_info
[
actorID
actorValue1
actorValue2
]
и мы также имеем
#film_actor
[movieID, actorID]
то, что я пытаюсь сделать, это присоединиться к этим фильмам и actro через movie_actor, чтобы я мог выбрать фильм и увидеть каждого актера, который играет в нем.
$db->prepare("SELECT *
FROM film_info fi
INNER JOIN film_actor fa
ON fi.film_id = fa.film_id
INNER JOIN actor_info ai
ON fa.actor_id = ai.actor_id");
с чем-то вроде этого. Он работает, но дает мне множество всей информации о фильме для каждого актера, который в нем играет. Например, если есть шесть актеров, он будет возвращать 6 массивов одной и той же информации о фильме, каждый раз имея разные [actor_name]
.
На что стоит вопрос: есть ли способ заставить его вернуть один массив со списком всех участников? Или я должен просто написать функцию, чтобы вручную выбрать всех участников из 6+ массивов?
Извините за мой страшный английский и спасибо заранее!
Вы должны group by
фильму, затем group_concat
актеров, чтобы все они были возвращены в 1 ряду фильмов. Кроме того, можно использовать с using
для on
когда столбцы обеих таблиц имеют одинаковое имя. Это должно делать то, что вы спрашиваете:
SELECT fi.movie_title, group_concat(actor_name_column)
FROM film_info fi
INNER JOIN film_actor using(film_id)
INNER JOIN actor_info using(actor_id)
group by film_id