如何在两个表之间创建一对多的关系?
问题描述:
我有一个有两列(名称,电话)的表的数据库,我想创建一对多的关系,以便同一个人可以有很多链接或电子邮件,我知道PDO和PHP SQL &。如何在两个表之间创建一对多的关系?
例如有人叫约翰,他的电话号码是78747384323,同一个人有很多链接,所以当我在数据库中点击他的名字时,我看到他的所有链接。
同一个人可以插入一个以上的时间与相同的名称和数量,但不同的链接数据库,
如何实现这一目标?因此,当我第一次插入姓名和电话以及一个链接时,姓名和电话号码将被添加到第一张表格中,但是会链接到第二张表格,并且当同一个人再次以相同的姓名和电话号码被插入时另一个链接,链接添加到他以前的链接。
答
你应该有2个表格。第一个叫做users
,第二个叫做user_details
。在你的第一张表格中,你应该有一个独特的字段。 mobile
。 在插入name
和mobile
之前,您应该检查手机是否存在。如果移动存在,则将link
和email
插入另一个表(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'
(编辑以显示查询示例)
我不知道,如果你知道外键,但与启动,如果你不知道。 – Loko
https://stackoverflow.com/questions/12402422/how-to-store-a-one-to-many-relation-in-my-sql-database-mysql – bc2946088
这实际上是两个问题。一个是关于数据库设计,另一个是关于添加记录。一次做一件事。从设计开始。 –