我有一个数据库,其中一个表有两列(名称,电话),我想创建一对多关系,以便同一个人可以有很多链接或电子邮件,我知道SQL& PDO和PHP。
例如有人打电话给约翰和他的号码是78747384323,同一个人有很多链接,所以当我在数据库中点击他的名字时,我会看到他所有的链接。
同一个人可能会多次插入具有相同名称和编号但链接不同的数据库,
如何实现?因此,当我第一次使用姓名和电话以及一个链接插入他时,名称和编号将添加到第一个表中,但链接指向第二个表格,并且当同一个人再次插入时使用相同的名称和编号另一个链接,该链接被添加到他以前的链接。
答案 0 :(得分:0)
你应该有2张桌子。第一个称为users
,第二个称为user_details
。在你的第一个表中你应该有一个独特的字段 - ex。 mobile
。
在插入name
和mobile
之前,您应该检查移动设备是否存在。如果移动设备存在,则将link
和email
插入另一个表格(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'
(编辑以显示查询示例)