1

我有 3 个 MySQL 表:汽车、用户和访客。

餐桌车可以与餐桌用户或餐桌访客相关。表用户和访问者具有不同的表结构。我想加入所有这些表并检索人员数据。目前我正在使用 PHP 来检索人员数据。

这是创建此类关系的最佳表结构吗?有没有办法使用单个 MySQL 查询来检索人员信息?

[汽车]
编号 | 车名 | 个人类型 | person_id
--------------+-------------+--------
1 | 车1 | 用户 | 1
2 | 车2 | 访客 | 1

 [用户]
编号 | 姓名
---+------------
1 | 人 1

 [访客]
编号 | 名字 | 姓
---+------------+----------
1 | 人 | 2
4

2 回答 2

1

您可以像这样使用外部联接:

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

我在一个非常相似的问题上写了一个相当详细的答案,你可能也想快速阅读一下。它显示了一些其他函数,您可以使用这些函数根据返回的行数以您想要的方式很好地格式化数据 - 以及每行返回的内容。

于 2012-08-21T10:15:24.493 回答
1

有几个选项可用。一个在帖子中提到。选择将是这样的:

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_typeandperson_id简单地同时拥有user_idand visitor_id。两者都是可空的,您甚至可以在它们上放置一个强大的外键。选择非常相似:

select * from
   cars a
   left join users u on (a.user_id=u.id)
   left join visitors v on (a.visitor_id=v.id)

最后但同样重要的是,也许您可​​以将usersandvisitors表合并到一个表中?

[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)
于 2012-08-21T10:21:23.193 回答