MySQL Join с несколькими условиями - PullRequest
55 голосов
/ 05 ноября 2011

У меня проблема с SQL-запросом, на самом деле это простой запрос, но я не могу понять, что мне не хватает, поэтому я пришел попросить вас о помощи ... Итак, что мне нужно сделать

У меня есть две таблицы rooms и rooms facilities ... и я должен выбрать комнаты с необходимыми удобствами.

Если я выберу комнату с одной комнатой (услуга с id = 4 - id_fu -) ... используя следующий запрос

SELECT u.* FROM rooms u 
JOIN facilities_r fu 
ON fu.id_uc = u.id_uc 
    AND fu.id_fu = '4' 
WHERE 1 
    AND vizibility='1' 
GROUP BY id_uc 
ORDER BY u_premium desc, id_uc DESC 

все в порядке.

Но если я хочу выбрать комнату с большим количеством удобств, скажем, объекты с id = 4 и id =3 .. используя следующий запрос

SELECT u.* FROM room u 
JOIN facilities_r fu 
ON fu.id_uc=u.id_uc 
    AND fu.id_fu = '4' 
    AND fu.id_fu = '3' 
WHERE 1 
    AND vizibility = '1' 
GROUP BY id_uc 
ORDER BY u_premium DESC, id_uc DESC 

он не работает.

Я не могу понять, почему это не работает, но я не могу понять, как поставитьсостояние ...

Спасибо, Михай

Ответы [ 3 ]

69 голосов
/ 05 ноября 2011

Вы можете группировать условия в скобках. Когда вы проверяете, равно ли поле другому, вы хотите использовать OR. Например WHERE a='1' AND (b='123' OR b='234').

SELECT u.*
FROM rooms AS u
JOIN facilities_r AS fu
ON fu.id_uc = u.id_uc AND (fu.id_fu='4' OR fu.id_fu='3')
WHERE vizibility='1'
GROUP BY id_uc
ORDER BY u_premium desc, id_uc desc
12 голосов
/ 05 ноября 2011
SELECT 
    u . *
FROM
    room u
        JOIN
    facilities_r fu ON fu.id_uc = u.id_uc
        AND (fu.id_fu = '4' OR fu.id_fu = '3')
WHERE
    1 and vizibility = '1'
GROUP BY id_uc
ORDER BY u_premium desc , id_uc desc

Вы должны использовать ИЛИ здесь, а не И.

Поскольку id_fu не может быть равным 4 и 3 одновременно, оба.

6 голосов
/ 11 сентября 2013

Если вы дважды присоединитесь к таблице услуг, вы получите то, что вам нужно:

select u.* 
from room u 
  JOIN facilities_r fu1 on fu1.id_uc = u.id_uc and fu1.id_fu = '4'
  JOIN facilities_r fu2 on fu2.id_uc = u.id_uc and fu2.id_fu = '3' 
where 1 and vizibility='1' 
group by id_uc 
order by u_premium desc, id_uc desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...