我有一个带游览的数据库(团体城市游览指南)。我需要的是一个SQL查询(对于一个mysql 5.1.54数据库),它最终会给我一个PHP数组,其中包含多个表中的信息。我能够通过对前3个表进行查询然后在foreach循环中添加表4和表5中的信息来实现此目的。
但是,我需要使用查询进行搜索/过滤(例如:显示所有预订,其中合作伙伴的ID为9)所以我需要SQL来选择相应的预订。
数据库的简化版本:
表1:预订:
id id_client id_tour
1 22 6
2 23 5
表2:客户(一个预订有一个客户):
id name
22 John
23 William
表3:旅游(一次预订有一次旅行)
id name
5 big tour
6 small tour
表4:合作伙伴(一个预订可以有多个合作伙伴):
id id_reservation id_partner_type id_partner status
34 1 9 16 1
35 1 9 17 0
表5:指南(一个预订可以有多个指南):
id id_reservation id_guide
18 1 14
19 1 15
我试图解决这个问题,但我无法获得完成这项工作的查询。我使用GROUP_CONCAT来获取多个合作伙伴和指导ID。我遇到的最大问题是无法包含没有合作伙伴和/或指南的预订,例如预订2。
答案 0 :(得分:0)
要包含所有没有合作伙伴和指南的预订,您需要使用OUTER JOINs
,例如,以下查询将为您提供表格4,5中的所有信息,包括您的条件:
Select p.*, g.*
from reservations r
left outer join partners p on p.id_reservation = r.id
left outer join guides g on g.id_reservation = r.id
where p.id_reservation is null and g.id_reservation is null