@aassdds
Люблю борщ и PHP

Как организуются фильтры по нескольким таблицам на сайтах?

Добрый день!
Есть сайт посвященный гостиницам
Есть таблица, которая хранит сами отели
Есть таблица которая хранит пару id-отеля и id-свойства отеля (например wifi/ уборка в номере / и т д)
Есть таблица комнат отелей - id-отеля; цена-комнаты; описание-комнаты

Как вообще реализовываются фильтры в таких случаях ?
Например мне надо все отели с wifi и комнатами за 300 ...
как мне сделать более-менее оптимальную выборку чтоб не перебирать все отели и не проверять все их свойства / комнаты ... что то мне подсказывает что есть более оптимальный вариант

Да и вообще - есть ли у кого ссылка на материалы чтобы почитать о таких вот вариантах фильтров...
  • Вопрос задан
  • 223 просмотра
Решения вопроса 1
@KFan
Веб-программист
select * from hotels
right join rooms ON hotels.id = rooms.hotel_id 
          AND rooms.price > 300
right join props ON hotels.id = props.hotel_id 
          AND props.room_id = rooms.id 
          AND props.prop_id = "wifi"


примерно так, возможно в запросе есть ошибка, я его писал прямо тут, чтобы сделать гарантированно рабочий нужны таблицы которые участвуют в запросе
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Обычно такие задачи на чистом SQL не делают из-за того, что решение получается медленным и громоздким.
Вам нужен фасетный поиск. Он реализован, например, в Sphinx и ElasticSearch.
Ответ написан
Комментировать
@nllm
Выше верно написали. Надо (желательно) использовать ElasticSearch и фасетный поиск.
Если просто sql-запросы писать, то они будут огромные с кучей джойнов.

Еще можете посмотреть статью https://habrahabr.ru/post/261137/
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы