提问人:MADZ 提问时间:11/16/2023 最后编辑:ADysonMADZ 更新时间:11/16/2023 访问量:58
如何在MySQL中为单个电影从多个表中选择数据?
How should I select data from multiple tables for a single movie in MySQL?
问:
我不知道如何有效地编写一个查询,从单个电影中获取所有数据以显示在 PHP 的浏览器中
目前我有一个包含 7 个表的数据库:
电影、演员、流派、制片人、movie_actor、movie_genre、movie_producer
要获取 1 部单部电影的所有信息,我目前有以下查询:
SELECT
movies.tmdb_id,
movies.budget,
movies.title,
movies.description,
movies.runtime,
movies.vote_average,
movies.popularity,
movies.backdrop_path,
movies.poster_path,
movies.released_at,
GROUP_CONCAT(DISTINCT actors.name) AS movie_actor_names,
GROUP_CONCAT(DISTINCT actors.poster_path) AS movie_actors_poster_path,
GROUP_CONCAT(DISTINCT movie_actor.movie_character) AS movie_actors_character,
GROUP_CONCAT(DISTINCT genres.name) AS movie_genre_names,
GROUP_CONCAT(DISTINCT producers.name) AS movie_producer_names,
GROUP_CONCAT(DISTINCT producers.poster_path) AS movie_producer_poster_path
FROM
movies
JOIN
movie_actor ON movies.id = movie_actor.movie_id
JOIN
actors ON actors.id = movie_actor.actor_id
JOIN
movie_genre ON movies.id = movie_genre.movie_id
JOIN
genres ON movie_genre.genre_id = genres.id
JOIN
movie_producer ON movies.id = movie_producer.movie_id
JOIN
producers ON movie_producer.producer_id = producers.id
GROUP BY
movies.id
HAVING
movies.id = 9;
我现在被困在如何有效地执行此查询上,因为我将使用 PHP 显示浏览器中返回的数据,但现在 actor 已从它的 poster_path 中分离出来,生产者也是如此。我能做得更好以及如何优化这个查询,现在感觉有点骇人听闻。我应该进行多个查询吗?应该是 1 个查询吗?
如果您对我应该学习哪些科目来进入此类查询有任何建议,请告诉我,我将不胜感激。
答:
0赞
simplycoding
11/16/2023
#1
我想我知道你想做什么。我会对 、 、 和 表进行子查询,因为您正在那里进行聚合,并且您可以删除必须使用 .actors
movie_actors
genre
producers
distinct
然后,您可以在所有表之间联接,并使用简单的筛选器来获取,而不是对整个结果集进行聚合。where
movie.id = 9
希望能有所帮助
上一个:MySQL触发器和存储过程复制
下一个:从数组 JSON 中选择元素范围
评论
WHERE
HAVING
GROUP BY
WHERE
GROUP BY