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

问题描述:

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

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

同一个人可以插入一个以上的时间与相同的名称和数量,但不同的链接数据库,

如何实现这一目标?因此,当我第一次插入姓名和电话以及一个链接时,姓名和电话号码将被添加到第一张表格中,但是会链接到第二张表格,并且当同一个人再次以相同的姓名和电话号码被插入时另一个链接,链接添加到他以前的链接。

+0

我不知道,如果你知道外键,但与启动,如果你不知道。 – Loko

+0

https://*.com/questions/12402422/how-to-store-a-one-to-many-relation-in-my-sql-database-mysql – bc2946088

+0

这实际上是两个问题。一个是关于数据库设计,另一个是关于添加记录。一次做一件事。从设计开始。 –

你应该有2个表格。第一个叫做users,第二个叫做user_details。在你的第一张表格中,你应该有一个独特的字段。 mobile。 在插入namemobile之前,您应该检查手机是否存在。如果移动存在,则将linkemail插入另一个表(user_details)。在user_details表中应该有一个列user_id这将标识用户链接和电子邮件的关系。

正如Loko的上面的评论 - 你需要外键。基本上,你的“人”表应该有一个主键,如“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所有者)。

因此,在这个例子中,如果你想显示属于某个人的所有电子邮件地址,你知道他们的“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' 

(编辑以显示查询示例)