【问题标题】:How to create one to many relationship between two tables?如何在两个表之间创建一对多关系?
【发布时间】:2018-03-06 09:23:04
【问题描述】:

我有一个包含两列(姓名、电话)的表的数据库,我想创建一个一对多的关系,以便同一个人可以有许多链接或电子邮件,我知道 SQL & PDO 和 PHP。

例如有人叫约翰,他的号码是 78747384323,同一个人有很多链接,所以当我在数据库中点击他的名字时,我会看到他的所有链接。

同一个人可能被多次插入数据库,名字和号码相同,但链接不同,

如何实现?所以当我第一次用姓名和电话和一个链接插入他时,姓名和号码被添加到第一个表中,但链接到第二个表,当同一个人再次插入相同的姓名和号码时另一个链接,该链接被添加到他之前的链接中。

【问题讨论】:

  • 我不知道你是否知道外键,但如果你不知道就从这个开始。
  • 这其实是两个问题。一个是关于数据库设计,另一个是关于添加记录。一次做一件事。从设计开始。

标签: php sql pdo phpmyadmin


【解决方案1】:

您应该有 2 张桌子。第一个称为users,第二个称为user_details。在您的第一个表中,您应该有一个唯一的字段- ex。 mobile。 在插入namemobile 之前,您应该检查手机是否存在。如果存在移动设备,则将linkemail 插入另一个表(user_details)。在 user_details 表中应该有一列 user_id 将标识用户链接和电子邮件关系。

【讨论】:

    【解决方案2】:

    正如上面 Loko 的评论 - 你需要外键。基本上你的“person”表应该有一个主键,比如“personid”:

    CREATE TABLE person (
      personid int not null auto_increment,
      name varchar(50),
      phone varchar(20),
      primary key (personid)
    )
    

    然后,您的电子邮件表会将其作为外键引用 - 即

    CREATE TABLE email (
      emailid int not null auto_increment,
      emailaddress varchar(100),
      personid int,
      primary key (emailid),
      foreign key (personid)
        references person(personid)
    
    )
    

    (已编辑以将主键添加到电子邮件表)

    这将为您带来一对多的关系 - 一个人可以拥有零到多个电子邮件地址(每个电子邮件地址都印有他们的 personid 'owner')。

    所以在这个例子中,如果你想显示属于某个人的所有电子邮件地址并且你知道他们的“personid”,你可以这样做:

    SELECT emailaddress FROM email WHERE personid = 1234
    

    如果你只知道他们的名字,你可以加入:

    SELECT email.emailaddress
    FROM email
    INNER JOIN person ON person.personid = email.personid
    WHERE person.name = 'Jon Byjovi'
    

    (已编辑以显示查询示例)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 2019-10-23
      相关资源
      最近更新 更多