2011-12-06 66 views
1

我有一个带有导览的数据库(带导游的城市导览)。我需要的是一个SQL查询(对于MySQL 5.1.54数据库),它最终会给我一个PHP数组,其中包含多个表中的信息。通过对前3个表执行查询,然后在foreach循环中添加表4和表5中的信息,我就可以实现这一点。对mysql数据库中的多个(一对多)表进行SQL查询

但是,我需要使用查询进行搜索/筛选(如:显示所有预订,其中伙伴ID为9),所以我需要SQL来选择相应的预订。

  1. 必须包括没有合作伙伴(表4)和/或指南(表5)的预订。
  2. 结果中必须包含所有合作伙伴和指南(预订可以有更多合作伙伴/指南)
  3. 表4和表5中的所有信息必须包含在内(如表4中的状态)。

的简化版本的数据库:

表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 

我试图来解决这一问题,但我不仅仅是C没有得到一个查询来完成这项工作。我使用GROUP_CONCAT来获取多个合作伙伴和指南ID。我拥有的最大问题是无法包含没有合作伙伴和/或指南(如预订2)的预订。

回答

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