Поиск по checkbox параметрам, или как хранить кэш поискового запроса?

Добрый день.
база mySql, модуль pdo
Сайт представляет собой базу с пару тысяч объектов, по которым производится выборка, по десятку критерий.
У объекта есть параметры, которые выбираются через чекбокс и хранятся в бд в одном поле вида 1||4||7||8 (||-разделитель). По этим данным надо организовать поиск, например задача найти объект в котором выбрано 4 и 8.
Я так понимаю нет способов реализовать выборку одним запросом. Если есть подскажите пожалуйста?
Есть идея сформировать массив всех объектов с параметрами которые используются для поиска, и предварительно разбить значения 1||4||7||8, сохранить в файл и осуществлять поиск по файлу, естественно файл обновлять каждый раз после изменения или добавления объекта.
Не знаю на сколько это адекватно, и как вообще и в каком виде хранится кэш для быстрого поиска без нагрузки на бд
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
sanchezzzhak
@sanchezzzhak
Ля ля ля...
лучше всего это отдельной таблицей хранить допполя принцип EAV

orders_attr
enty_id (index)

value_text
value_int
type_id (index)

orders_type
id
name
virtual_name = 'wifi'
type ( int,str)
select o.* from orders o 
inner join order_attr a on o.id = a.enty_id
where  
( a.type_id = 1 and value_int IN(1,2,3,4) )
and 
( a.type_id = 2 and value_int = 1 )


способ 2
создать поле LARGETEXT
для JSON суда запихиваете данные
поиск делаете через sphinx ngnix проиндексирует индексы + json структуру по которой можно сделать доп фильтр.
mysql тоже умеет создавать индексы для json как виртуальный индекс ( это конкретный ключ в json )

сам я бы сделать EAV + sphinx
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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