2013-02-17 94 views
1

我打算創建一個類似於IMDB.com.ab的網站。爲了減少執行時間,我正在使用以下結構可以更快地工作嗎?Mysql表結構快速工作嗎?

 
Table - 1 

Id Movie_name description 

1 name one some description 
2 name two some description 
3 name three some description 

Table 2 

id actorname 
1 name 1 
2 name 2 
3 name 3 
4 name 4 

Table 3 

id movieid actorid 

1 1  1 
2 1  2 
3 1  3 
4 1  9 
5 2  6 
6 2  5 
7 2  8 
8 2  1 
當我要列出的演員在電影節目將會從表3的演員ID和發現從表2中各自的名稱

(使用單個查詢)。當我想列出一個演員它將檢索的電影表3中的電影ID並從第一個表中找到相應的名稱。它能正常工作嗎?任何其他想法?

+1

在大多數情況下,actor的順序很有用。 – StarPinkER 2013-02-17 12:30:17

+0

如果你已經不是,我建議你讓自己熟悉數據庫標準化。這將指導你如何最好地設計你的表格和它們之間的關係。 – greenLizard 2013-02-17 12:35:33

回答

2

這會給所有參與者在指定的影片,

SELECT c.ID, c.actorName 
FROM table1 a 
     INNER JOIN table3 b 
      ON a.ID = b.movieID 
     INNER JOIN table2 c 
      ON b.actorid = c.ID 
WHERE a.ID = 1 

這人會給所有的電影在指定演員

SELECT a.* 
FROM table1 a 
     INNER JOIN table3 b 
      ON a.ID = b.movieID 
     INNER JOIN table2 c 
      ON b.actorid = c.ID 
WHERE c.ID = 1 

爲了進一步增加關於連接的更多知識,請訪問以下鏈接:

UPDATE 1

這被稱爲Relational Division

SELECT a.ID, a.Movie_Name 
FROM table1 a 
     INNER JOIN table3 b 
      ON a.ID = b.movieID 
     INNER JOIN table2 c 
      ON b.actorid = c.ID 
WHERE c.ID IN (1, 2, 3) 
GROUP BY a.ID, a.Movie_Name 
HAVING COUNT(DISTINCT c.ID) = 3 
+0

謝謝你的sql querys我想找到電影的名字,演員1和演員2一起行動。你能幫我嗎? – 2013-02-18 02:17:34

+0

好的。我會更新答案。請稍候:D – 2013-02-18 02:32:56

+0

查看更新。 – 2013-02-18 02:38:48

0

我建議你修改table3,並帶走id字段。一起使用movieid和actorid作爲主鍵。您可能需要在此表中添加其他字段,例如字符名稱和外觀順序,如Jermaine Xu的評論中所建議的。