2011-08-05 13 views
1

私は5つのmysqlテーブルを持っています。
ショップLEFT JOINクエリの3番目のテーブルを含む

 
+----+--------------+--------------+ 
| id | name   | address  | 
+----+--------------+--------------+ 
| 1 | Shop1  | Street1  | 
| 2 | Shop2  | Street2  | 
| 3 | Shop3  | Street3  | 
| 4 | Shop4  | Street4  | 
+----+--------------+--------------+ 

果物

 
+----+--------------+--------------+ 
| id | fruit  | price  | 
+----+--------------+--------------+ 
| 1 | Bannana  | 2.5   | 
| 2 | Apple  | 2.1   | 
| 3 | Orange  | 1.8   | 
| 4 | Plum   | 2.2   | 
+----+--------------+--------------+ 

可用性

 
+----+--------------+--------------+ 
| id | shop_id  | fruit_id  | 
+----+--------------+--------------+ 
| 1 | 1   | 2   | 
| 2 | 2   | 2   | 
| 3 | 1   | 3   | 
| 4 | 2   | 1   | 
+----+--------------+--------------+ 

shop_activity

 
+----+--------------+--------------+--------------+ 
| id | shop_id  | user_id  | status  | 
+----+--------------+--------------+--------------+ 
| 1 | 2   | 1   | 1   | 
| 2 | 3   | 2   | 1   | 
| 3 | 1   | 2   | 2   | 
| 4 | 2   | 2   | 1   | 
+----+--------------+--------------+--------------+ 

ユーザー

 
+----+--------------+ 
| id | name   | 
+----+--------------+ 
| 1 | Peter  | 
| 2 | John   | 
+----+--------------+ 

私は、ID 2(りんご)とフルーツが利用できるお店の名前のリストを取得する結果として、クエリ

SELECT 
    availability.shop_id, 
    shops.name 

FROM availability 

LEFT JOIN shops 
ON availability.shop_id=shops.id 

WHERE 
fruit_id = 2 

を持っています。
shop_activityテーブルをクエリに含めると、usersの場合にユーザーのステータスを取得することができます。 id = 1適切な店の横にあります。あなたはこのような何かを試みることができる

 
Shop1, NULL 
Shop2, status: 1 

答えて

1

このような何か...:

SELECT 
    availability.shop_id, 
    shops.name, 
    shop_activity.status 
FROM availability 
LEFT JOIN shops 
ON availability.shop_id=shops.id 
LEFT JOIN shop_activity 
ON shop_activity.shop_id = availability.shop_id 
    and shop_activity.user_id = 1 
WHERE 
fruit_id = 2 
+0

私はすでにそれを試してみましたが、うまくいきません。その結果、私はリンゴを持ち、ユーザーの状態が存在する店舗のみを取得します。私はリンゴを持っているすべてのお店が欲しい。 – Goldie

+0

どういうわけか私はまだ同じ結果を得ています。 – Goldie

+0

@Goldie:分かりませんが、 'user_id'条件をJOIN節に移動すると違いがありますか? – FrustratedWithFormsDesigner

0
SELECT 
    availability.shop_id, 
    shops.name 

FROM shops 
LEFT JOIN availability ON availability.shop_id=shops.id 
LEFT JOIN shop_activity ON shop_activity .shop_id=shops.id 
WHERE 
fruit_id = 2 
and users.id=1 

は、以下のことを試してみてください

0

に参加左に最初のテーブルとしてお店を作ってみてください。

SELECT shops.name, shop_activity.status 
FROM shops 
    INNER JOIN availability ON availability.shop_id = shops.id 
     AND availability.fruit_id = 2 
    LEFT JOIN shop_activity ON shops.shop_id = shop_activity.shop_id 
     AND shop_activity.user_id = 1 

これは、リンゴを持つすべての店舗の行を与える必要がありますが、ユーザーが何も活動していない店舗ではステータスがnullとして表示され、そうでない場合はそのユーザーのステータスが表示されます。

関連する問題