Php MySQL动态表名关系
我有3个MySQL表:汽车、用户和访客 桌上汽车可以与桌上用户或桌上访客相关。表用户和访问者具有不同的表结构。我想连接所有这些表并检索人员数据。目前我正在使用PHP检索个人数据 这是创建此类关系的最佳表结构吗?是否有一种方法可以使用单个MySQL查询检索人员信息 [cars] id | car_name | person_type | person_id --------------+-------------+-------- 1 | car 1 | user | 1 2 | car 2 | visitor | 1 [users] id | name ---+---------- 1 | person 1 [visitors] id | first_name | last_name ---+------------+---------- 1 | person | 2 [汽车] id |车名|人类型|人id --------------+-------------+-------- 1 |汽车1 |用户1 | 2 |车2 |访客| 1 [用户] id |名称 ---+---------- 1人1人 [访客] id |名|姓 ---+------------+---------- 1 |人| 2Php MySQL动态表名关系,php,mysql,relationship,relation,Php,Mysql,Relationship,Relation,我有3个MySQL表:汽车、用户和访客 桌上汽车可以与桌上用户或桌上访客相关。表用户和访问者具有不同的表结构。我想连接所有这些表并检索人员数据。目前我正在使用PHP检索个人数据 这是创建此类关系的最佳表结构吗?是否有一种方法可以使用单个MySQL查询检索人员信息 [cars] id | car_name | person_type | person_id --------------+-------------+-------- 1 | car 1 | user | 1 2
您可以使用这样的外部联接:
select
a.ID,
a.car_name,
a.person_type,
b.name as username,
c.name as visotorName
from
cars a
left outer join users b
on a.person_id=b.ID
left outer join visitors c
on a.person_id=c.ID
select * from
cars a
left join users u on (a.person_type='user' and a.person_id=u.id)
left join visitors v on (a.person_type='visitor' and a.person_id=v.id)
我写了一篇关于一个非常相似的问题的文章,你可能也想快速阅读一下。它还显示了一些其他函数,您可以使用这些函数按照返回的行数以及每行返回的内容来很好地格式化数据。有几个选项可用。一个是在帖子中提到的。select将如下所示:
select
a.ID,
a.car_name,
a.person_type,
b.name as username,
c.name as visotorName
from
cars a
left outer join users b
on a.person_id=b.ID
left outer join visitors c
on a.person_id=c.ID
select * from
cars a
left join users u on (a.person_type='user' and a.person_id=u.id)
left join visitors v on (a.person_type='visitor' and a.person_id=v.id)
另一个选项是代替person\u type
和person\u id
只需同时拥有user\u id
和visitor\u id
。两者都可以为null,您甚至可以在它们上放置一个强外键。选择是非常相似的:
select * from
cars a
left join users u on (a.user_id=u.id)
left join visitors v on (a.visitor_id=v.id)
最后但并非最不重要的一点,也许您可以将用户
和访问者
表合并到一个表中
[cars]
ID | car_name | person_id
-----+----------+-------------
1 | car 1 | 1
2 | car 2 | 2
[persons]
ID | type | name
-----+---------+----------
1 | user | person 1
2 | visitor | person 2
然后,选择变得超级简单:
select * from cars c join persons p on (c.person_id=p.id)