Как организуются фильтры по нескольким таблицам на сайтах?
Добрый день!
Есть сайт посвященный гостиницам
Есть таблица, которая хранит сами отели
Есть таблица которая хранит пару id-отеля и id-свойства отеля (например wifi/ уборка в номере / и т д)
Есть таблица комнат отелей - id-отеля; цена-комнаты; описание-комнаты
Как вообще реализовываются фильтры в таких случаях ?
Например мне надо все отели с wifi и комнатами за 300 ...
как мне сделать более-менее оптимальную выборку чтоб не перебирать все отели и не проверять все их свойства / комнаты ... что то мне подсказывает что есть более оптимальный вариант
Да и вообще - есть ли у кого ссылка на материалы чтобы почитать о таких вот вариантах фильтров...
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"
примерно так, возможно в запросе есть ошибка, я его писал прямо тут, чтобы сделать гарантированно рабочий нужны таблицы которые участвуют в запросе
Обычно такие задачи на чистом SQL не делают из-за того, что решение получается медленным и громоздким.
Вам нужен фасетный поиск. Он реализован, например, в Sphinx и ElasticSearch.
Выше верно написали. Надо (желательно) использовать ElasticSearch и фасетный поиск.
Если просто sql-запросы писать, то они будут огромные с кучей джойнов.