【发布时间】:2011-07-10 06:21:10
【问题描述】:
我目前在一家小型初创公司担任程序员,旨在在线提供按次付费的内容,我被指派为电影目录开发元数据数据库
我有两个主表,movie 和 people,其中 *movie_ID* 和 *people_ID* 分别是每个表的主键。两个表都有多对多的关系。
为了表示我目前使用链接表的不同关系,例如,actor_movie 将存储电影中每个演员的 *movie_ID* 和对应的 *people_ID*,而 director_movie 表将存储 *movie_ID* 和导演 *people_ID*。作家、作曲家和制作人也是如此。
现在,我的问题是,我需要制定一个查询,在一个表中返回所有演员、导演、制片人、作家、作曲家等,以便在前端 Web UI 上作为列表传递所有参与电影的人。
我目前对如何创建多个 SELECT 查询感到困惑,该查询将根据 *movie_ID* 和 *people_ID* 将所有链接表连接在一起,然后返回 中每个人的详细信息people 表也是如此。
到目前为止,我所写的示例是:
SELECT
movie.titleMovie,
people.namePeople,
FROM
movie movie
INNER JOIN actorlinkmovie acm ON acm.idMovie = movie.idMovie
INNER JOIN people people ON people.idPeople = acm.idPeople
我希望发生的是:
SELECT
movie.idMovie,
movie.titleMovie,
movie.descMovie,
movie.dateMovie,
movie.runtimeMovie,
movie.langMovie,
movie.ratingMovie,
people.namePeople
FROM
htv_movie movie
INNER JOIN htv_actorlinkmovie acm ON acm.idMovie = movie.idMovie
INNER JOIN htv_directorlinkmovie dcm ON dcm.idMovie = movie.idMovie
INNER JOIN htv_producerlinkmovie pcm ON pcm.idMovie = movie.idMovie
INNER JOIN htv_people people WHERE people.idPeople = dcm.idPeople AND people.idPeople = acm.idPeople AND people.idPeople = pcm.idPeople
它应该从一部电影中返回所有相关的人。
希望获得有关整个设计的一些意见,因为我是设计整个数据库的新手(实际上是第一次),如果我需要扩展到大约 5000 部电影(当前公司宗旨)。该数据库也几乎可以用作网站的后端。
谢谢。
更新:使用 PHP 变量和模板 SQL 查询临时制定了一个肮脏的解决方案。看起来做多个内部连接毕竟不是必需的。不过感谢您的建议。
【问题讨论】:
-
你想要每个人的所有行以及他们的上下文/电影的幕后角色吗?或者,您是否想要一列显示“导演”、“作家”、“演员”等的所有名称...
-
如果可能的话,我希望有多个列。
标签: mysql innodb inner-join