2011-03-07 88 views
1

我目前在一家小型創業公司,旨在於提供在線付費觀看的內容是一個程序員,我被分配到開發電影目錄SQL多內部聯接在同一領域

元數據庫我有兩個主表,電影,其中* movie_ID *和* people_ID *分別爲每個表的主鍵。兩個表都有多對多的關係。

爲了表示我目前使用的鏈接表不同的關係,例如,actor_movie將存儲在* movie_ID *和相應的* people_ID *每個在電影中的演員,而director_movie表將存儲* movie_ID *和導演* people_ID *。作家,作曲家和製作人也是如此。

現在,我的問題是,我需要制定一個查詢,返回所有的演員,導演,製作人,作家,作曲家等等在一個單獨的表中作爲一個列表在前端Web UI上傳遞所有參與電影的人。

我目前很難理解如何創建一個基於* movie_ID *和* people_ID *將所有鏈接表加入到一起的多個SELECT查詢,然後返回每個人在人中的每個人的詳細信息表也是如此。

和舉例的是我至今寫的是:

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查詢制定了一個骯髒的解決方案。看起來好像做多個內部連接並不是必需的。謝謝你的建議。

+0

你是否想要每個人的所有行和他們的上下文/部分在電影的幕後?或者,你是否想要一列顯示「導演」,「作家」,「演員」等所有名字...... – DRapp 2011-03-07 11:57:53

+0

如果可能,我寧願擁有多列。 – 2011-03-08 03:36:00

回答

0

你可以實現你的目標是這樣的:

SELECT的movieName, dbo.GetDirector(MovieID), dbo.GetActors(MovieID), dbo.GetWriter(MovieID)FROM電影

其中

  • dbo.GetDirector(MovieID)是 函數將返回目錄影片中的電影 。
  • dbo.GetActors(MovieID)是一個函數 ,它將返回電影中的演員。
  • dbo。GetWriter(MovieID)是一個功能 ,它將返回 電影中的作者。

如果還有其他表,那麼你也可以爲這些表做功能。

希望這會有所幫助。