MySQL Присоединиться к нескольким условиям
У меня проблема с 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
он не работает.
Я не могу понять, почему это не работает, но я не могу понять, как установить условие...
Спасибо, Михай
Ответы
Ответ 1
Вы можете группировать условия с круглыми скобками. Когда вы проверяете, совпадает ли поле с другим, вы хотите использовать 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
Ответ 2
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
Вы должны использовать OR здесь, а не AND.
Так как id_fu не может быть равным 4 и 3, оба сразу.
Ответ 3
Если вы дважды присоединитесь к таблице удобств, вы получите то, что вам нужно:
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