2011-08-05 8 views
1

다섯 개의 mysql 테이블이 있습니다.
상점LEFT JOIN 쿼리에 세 번째 테이블 포함

 
+----+--------------+--------------+ 
| 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 

있습니다.
users 인 경우 shop_activity 테이블을 쿼리에 포함시켜 사용자 상태를 얻을 수 있도록해야하는 이유는 무엇입니까? 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로 표시되고 그렇지 않으면 해당 사용자의 상태가 표시됩니다.