Включить третью таблицу в запрос LEFT JOIN - PullRequest
1 голос
/ 05 августа 2011

У меня есть пять таблиц mysql.
магазины

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

У меня есть запрос

SELECT
    availability.shop_id,
    shops.name

FROM availability

LEFT JOIN shops
ON availability.shop_id=shops.id 

WHERE
fruit_id = 2

В результате я получаю список наименований магазинов, в которых есть фрукты с id 2 (яблоко).
Что мне нужно сделать, чтобы я мог включить в запрос таблицу shop_activity , чтобы получить статус пользователя, если users. id = 1 рядом с соответствующим магазином. Как то так ...

Shop1, NULL
Shop2, status: 1

Ответы [ 3 ]

1 голос
/ 05 августа 2011

Вы можете попробовать что-то вроде этого:

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 голосов
/ 06 августа 2011

Попробуйте следующее:

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

Это должно дать вам строку для каждого магазина с яблоками, но для магазинов, где у пользователя нет активности, статус будет нулевым, в противном случае отображается статус этого пользователя.

0 голосов
/ 06 августа 2011
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

попробуйте сделать магазины первой таблицей в левом соединении

...