如何在表之间建立关系?

时间:2014-07-16 06:25:04

标签: php mysql sql

我有一个用于发布新文章的表格,并且使用while循环打印表格的内容。

现在我希望观众能够对文章发表评论,因此我在while循环中创建了另一个评论表和文章下的表单,但每当有人对该文章发表评论时,评论都会显示在所有文章中。

因为文章和评论在一个while循环中,并且表之间没有关系。 表格如下:

content_posts( id int primary auto, subject varchar, postby varchar, 约会日期, 内容varchar )

评论( id int primary auto, 名称varchar, 电子邮件varchar, 身体变形 )

3 个答案:

答案 0 :(得分:1)

您可以尝试通过aticle id列链接表格:例如:带有列ID的文章和带有名为article_id的字段的COMMENTS,其中包含相应文章的ID。 然后你可以像这样使用INNER JOIN

SELECT * FROM ARTICLES as t1 INNER JOIN COMMENTS as t2 ON t1.id = t2.article_id

希望它有所帮助!

答案 1 :(得分:1)

如果你想建立一种关系,你必须确定你的关系感。

一对一

关系的每一方都与唯一的实体相关。例如,现在,您将用户定义分为两部分:

  • 连接处理程序(密码,上次登录日期,激活)
  • 个人资料信息(用户名,电子邮件,最喜欢的电影......)

一个配置文件只有一个处理程序,一个处理程序只有一个配置文件。

在这种情况下,每个表要添加一个带有每个实体标识符的外键。

一对多

您的博客所拥有的案例。一篇文章有​​很多评论,一篇评论只有一篇文章。

因此,在comment表中,您必须添加外键,该外键是指向article.id的链接。 然后,要选择一篇文章中的注释,您必须创建一个WHERE:

SELECT * FROM comment_table WHERE id_article = 1 -- for your first article, 

如果您要从文章表加载评论表中的信息,则必须使用JOIN命令:

SELECT comment_table.*, article_table.* FROM article_table 
   JOIN comment_table ON article_table.id = comment_table.id_article 

多对多

每个实体都可以与其他实体相关联。例如,你为你的文章提供了标签:每个标签被分配给许多文章,每篇文章可以有许多标签。

在这种情况下,您必须创建一个只有tag_idarticle_id的新表格。 要使用他的标签选择一篇文章,您必须进行双重加入:

SELECT article.*, tags.* FROM article_table article 
    JOIN tags_in_article tia ON tia.id_article = article.id
    JOIN tag_table tags ON tia.id_tag = tag.id
    WHERE article.id = 1

答案 2 :(得分:0)

您需要在文章表中定义主键(通常称为id),并在注释表中定义外键。然后使用该关键关系(在这种情况下为一对多)来确保仅显示与特定文章相关的评论。使用id,您将遍历查找匹配项的外键。