passshift
@passshift
php, js, html5, css

Как сформировать mysql запрос для фильтрации выдачи?

Здравствуйте!

Нужна помощь с запросом, всю ночь вожусь ничего не получается.

Суть вот в чем:

Есть фильтр гостиниц и отелей, есть ряд услуг которые могут быть включены, использую связь много ко многим, создал 2 таблицы:

Hotels - тут id, наименование и тд
Comforts - тут 2 поля, одно id-отеля, второе id-услуги

Сделал фильтр с chek-боксами типа multiple.

Хочу выбрать только гостиницы с услугами wi-fi и парковкой, гостиницы выбираются, отели отсекаются - тут проблем нет.

Далее, специально выставляю все флажки (wi-fi, парковка, бассейн и тд), и тут проблема, мне выдает гостиницы в которых нет бассейна, но есть wi-fi и парковка...

---

Я фильтры впервые пишу, как-то не понимаю самой логики. Нужна помощь с запросом.

Сейчас он такой:

SELECT * FROM `hotels` JOIN `comfort` ON (`comfort`.`hotelId` = `hotels`.`id`) WHERE `type` IN ('1', '2') AND `comfortId` IN ('1', '2', '3', '4') GROUP BY `id`


type - тип (1 - гостиница, 2 - отель)
comfortId - айдишник услуги (1 - wi-fi, 2 - парковка, 3 - бассейн, 4 - спа-услуги)
  • Вопрос задан
  • 2308 просмотров
Решения вопроса 1
passshift
@passshift Автор вопроса
php, js, html5, css
Помог LIKE:

'SELECT * FROM `hotels` WHERE `comfort` LIKE '%1%' .......
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SELECT h.*, count(*) as comfort_cnt
FROM `hotels` h
INNER JOIN `comfort` c ON c.`hotelId` = h.`id` AND c.`comfortId` IN ('1', '2', '3', '4')
WHERE h.`type` IN ('1', '2')
GROUP BY h.`id`
HAVING comfort_cnt = 4

где comfort_cnt = 4 - это количество услуг
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы