2011-12-06 101 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