2012-11-28 37 views
0

我有兩個表。 「用戶」和「電影」。用戶表由「id」(自動增量),「名稱」和「密碼」列組成。現在有2個用戶名存儲。電影表中有'標題'和'年份'欄。 PHP腳本允許每個用戶觀看和添加新電影到他們的列表中。我如何鏈接或建立父母 - 子女關係或使其在MySQL中發生所需的任何事情?哦,我也用Adminer。現在,當我登錄一個用戶時,我仍然可以看到與其他用戶已添加的相同電影。在MySql /父子關係中鏈接不同表中的列

回答

0

您需要在兩個表格之間創建一個「多對多」關係。

要做到這一點:

  • 首先,在Movies表中創建一個ID列唯一標識每一個
  • 然後,創建另一個表名爲user_movies(或「關注」或有用的東西),那包含用戶ID,電影ID以及您希望添加的任何其他信息,例如觀看日期或評分(「星號」的數量等)。

然後,無論何時用戶觀看電影,添加一條記錄到th e user_movies表來標記他們已經完成的事實。

它應該是多對多的,因爲每個用戶都可以看幾部電影,但每部電影都可以被多個用戶觀看。在這種情況下,「親子」關係並不合適,是一對多的關係。

+0

我的不好,我做了一個錯誤的解釋。這些不是真正的電影。這只是電影列表。您可以將另一部電影添加到列表中,或者觀看您喜歡的最喜歡的電影列表。我無法再創建更多表格。說明書說我必須只使用2個表格,用戶和電影。 –

+0

哦,這是作業。告訴你的老師這是一個可怕的設計,並在標記爲正確之後向他展示Jonathon的回答;) –

0

如果您堅持只使用評論中所述的兩個表格,則必須重新設計Movies表格以包含標識哪個用戶創建該條目的列UserID。然後,您可以過濾數據,以便用戶只能看到有關他們添加到列表中的影片的信息。

這不是一個好設計 - answerJeremy Smyth暗示一張額外的表格將電影與用戶聯繫起來要明智得多,但你已經指出這是不允許的。這不是一個好設計的原因是,你最終會得到很多行,表明同一年發行的同一部電影,每行都由不同的用戶輸入,因此不必要的重複。也有更多的機會出現錯誤;你將獲得1938年「飄」的參賽作品,1939年的「飄」,以及1940年的「飄」,當時只有一年(1939年)。


能否請您具體談談我有什麼做的......

在兩表,唯一的系統,你會創建電影表是這樣的:

CREATE TABLE Movies 
(
    Title VARCHAR(32) NOT NULL, 
    Year  INTEGER NOT NULL, 
    UserID INTEGER NOT NULL REFERENCES Users(ID), 
    PRIMARY KEY(Title, Year, UserID) 
); 

當您向此表中插入記錄時,您將記錄插入的用戶的ID,以便查詢誰創建了哪些電影記錄。

如果你實際上要從數據庫的其他地方引用這個表,那麼你可以在這裏添加一個ID列,但是如果有更多的表,那麼你會從這個表中刪除UserID列並創建一個關係表:

CREATE TABLE Movies 
(
    ID  INTEGER AUTOINCREMENT PRIMARY KEY, 
    Title VARCHAR(32) NOT NULL, 
    Year  INTEGER NOT NULL, 
    UNIQUE(Title, Year) 
); 

CREATE TABLE Users_Movies 
(
    MovieID INTEGER NOT NULL REFERENCES Movies(ID), 
    UserID INTEGER NOT NULL REFERENCES Users(ID), 
    PRIMARY KEY(MovieID, UserID) 
); 

現在你可以有「亂世佳人」 1939年二十個不同的人一個記錄,這可能ID號碼207,並可能會列出MovieID 207作爲他們的電影之一,在20個簡單的記錄Users_Movies表。

+0

你可以更具體地說明我必須做什麼,按什麼順序以及在哪裏點擊。我剛開始學習。現在使用phpmyadmin。 –

+0

完全可以如何操作此部分「可以識別哪個用戶創建了該條目,然後您可以過濾數據,以便用戶只能看到他們添加到列表中的影片的相關信息。」 我對這一切都很陌生,所以如果你能用一些直接的指示來幫助我,那將不勝感激。提前致謝 –