2011-12-06 8 views
1

私はツアー(ガイド付きのグループ都市ツアー)を持つデータベースを持っています。私が必要とするのは、最終的に複数のテーブルを組み合わせた情報を持つPHP配列を与えるSQLクエリ(mysql 5.1.54データベース用)です。私は最初の3つのテーブルだけを照会し、foreachループ内のテーブル4と5の情報を追加することでこれを達成することができます。mysqlデータベースの複数(1対多)テーブルのSQLクエリ

しかし、私は検索/フィルタリングのためにクエリを使用する必要があります(たとえば、パートナーがID 9を持つすべての予約を表示する)ので、対応する予約を選択するにはSQLが必要です。

  1. パートナー(表4)および/またはガイド(表5)の予約が含まれている必要があります。
  2. すべての情報が含まれている必要があります(表4のステータスなど)。

データベースの簡略化されたバージョン:

表1:予約:

id id_client id_tour 
1  22   6 
2  23   5 

表2:クライアント(一方予約つのクライアントを有している):

id name 
22 John 
23 William 

表3:パートナー(一方の予約が複数のパートナーを持つことができる):

id id_reservation id_partner_type id_partner status 
34 1     9     16   1 
35 1     9     17   0 

表5:ツアー

id name 
5  big tour 
6  small tour  

表4(一方の予約一件のツアーを有する)ガイド(1件の予約が持つことができ複数のガイド):

id id_reservation id_guide 
18 1     14 
19 1     15 

私はこれを試してみましたが、私はちょうどcジョブを実行するクエリを取得しないでください。私はGROUP_CONCATを使用して複数のパートナーとガイドIDを取得しました。私が持っている最大の問題は、パートナーや予約のようなガイドがない予約を含めることができないことです。

答えて

0

OUTER JOINsを使用する必要があるパートナーやガイドのない予約をすべて含めるには、

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 
テーブルを含むすべての情報をテーブル4,5から取得できます。
関連する問題