2012-11-28 33 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

完全可以如何操作此部分“可以识别哪个用户创建了该条目,然后您可以过滤数据,以便用户只能看到他们添加到列表中的影片的相关信息。” 我对这一切都很陌生,所以如果你能用一些直接的指示来帮助我,那将不胜感激。提前致谢 –