我目前在一家小型创业公司中担任程序员,旨在在线提供按次计费的内容,并被分配为电影目录开发元数据数据库
我有两个主表,电影和人,其中* 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查询。看起来根本不需要进行多个内部联接。谢谢你的建议。
最佳答案
您可以这样实现目标:
选择MovieName,
dbo.GetDirector(MovieID),
dbo.GetActors(MovieID),
电影中的dbo.GetWriter(MovieID)
哪里
dbo.GetDirector(MovieID)是一个
可以返回董事的职能
在这部影片中。
dbo.GetActors(MovieID)是一个函数
这将使电影中的演员回归。
dbo.GetWriter(MovieID)是一个函数
这将使作家回归
电影。
如果还有其他表,那么您也可以为这些表创建函数。
希望这可以帮助。
关于mysql - SQL多个内部联接在同一字段上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5218522/