如何在两个表之间创建一对多的关系?

时间:2017-09-25 11:56:53

标签: php sql pdo phpmyadmin

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

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

同一个人可能会多次插入具有相同名称和编号但链接不同的数据库,

如何实现?因此,当我第一次使用姓名和电话以及一个链接插入他时,名称和编号将添加到第一个表中,但链接指向第二个表格,并且当同一个人再次插入时使用相同的名称和编号另一个链接,该链接被添加到他以前的链接。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

正如Loko的评论 - 你需要外键。基本上你的人是' table应该有一个主键,例如' 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)

)

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

这会给你带来一对多的关系 - 一个人可以拥有零到多个电子邮件地址(每个电子邮件地址都标有他们的人物'所有者')。

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

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'

(编辑以显示查询示例)