Mysql json

SocMaster

Профессор
Регистрация
26 Июл 2011
Сообщения
211
Реакции
49
В общем, надо сделать фильтрацию в доске объявлений. Фильтры создаются через админку, прикрепляются к категориям там же. Возник вопрос, как хранить динамический фильтры в записах объяв?
сразу подумал о json колонке где будет список фильтров и их значение (tv:yes;dvd:no;)
только как выборку делать строк с нужным фильтром?
в гугле в основном идеи с like для json
но медленно же, есть более адекватные решение? (кроме как создавать колонку для каждого фильтры в таблице с объявами. 200 фильтров = +200 колонок)
 
Версия: 5.5

Как хранить пока вот думаю, хотел обычный json
но как поискать осуществить потом по всем записям. т.е отфильтровать объявы

Почитал ещё немного о EAV, правильно ли я понимаю?
создаем таблицу
3 поля
айди объявления
айди поля фильтры
значение

тогда вопрос как осуществить фильтр тогда? через join? не особо понимаю
 
Последнее редактирование модератором:
Версия: 5.5

Как хранить пока вот думаю, хотел обычный json
но как поискать осуществить потом по всем записям. т.е отфильтровать объявы
Обычный Json можно будет запихать только в обычный текст) и в этом случае - только лайком)
Или, если есть возможность обновится до 5.7 и заюзать нативный json :)

p.s. была еще статья на хабре, с реализацией через redis Для просмотра ссылки Войди или Зарегистрируйся
 
Если не слишком много фильтров - моешь создать таблицу вида : id | id_obj | tv | dvd...
когда применишь фильтр к объявлению - добавляется строка 1 | 123 | 1 | 0
При сортировке - элементарно SELECT * FROM filter WHERE tv = 1; и получаешь объявления с пометкой tv
 
Если не слишком много фильтров - моешь создать таблицу вида : id | id_obj | tv | dvd...
когда применишь фильтр к объявлению - добавляется строка 1 | 123 | 1 | 0
При сортировке - элементарно SELECT * FROM filter WHERE tv = 1; и получаешь объявления с пометкой tv
ТС написал ведь:
(кроме как создавать колонку для каждого фильтры в таблице с объявами. 200 фильтров = +200 колонок)
200 фильтров... предлагаешь 200 колонок? :)
 
Если не слишком много фильтров - моешь создать таблицу вида : id | id_obj | tv | dvd...
когда применишь фильтр к объявлению - добавляется строка 1 | 123 | 1 | 0
При сортировке - элементарно SELECT * FROM filter WHERE tv = 1; и получаешь объявления с пометкой tv
Очень умно..
фильтры создаются через админку, прикрепляются к категориям. понятно же что их будет очень много
 
Очень умно..
фильтры создаются через админку, прикрепляются к категориям. понятно же что их будет очень много
второй вариант: есть таблица(типа справочник) в которой перечислены 200 строк с фильтрами id | name... допустим ты указываешь товару что он относиться к "tv" (а tv имеет в этой табличке например id = 7)
В таблице (назовем ее связь) при указании фильтра добавляется строка
id | id_objavleniya | id_filtra
1 | 123 | 7
таким образом, когда на сайте поставят чекбокс на фильтр tv, скрипт идет в справочник смотрит какой id у параметра tv (7). После, с этим параметром отправляется в таблицу связь, и просит показать какие объявления имеют этот параметр.
 
таким образом, когда на сайте поставят чекбокс на фильтр tv, скрипт идет в справочник смотрит какой id у параметра tv (7). После, с этим параметром отправляется в таблицу связь, и просит показать какие объявления имеют этот параметр.
а если фильтр цвет? получится 100500 записей с цветом? мне кажется с редиской как раз то что нужно.
 
Назад
Сверху