Mysql json

Тема в разделе "Базы данных", создана пользователем SocMaster, 4 янв 2016.

Модераторы: latteo
  1. SocMaster

    SocMaster aka Hakerok

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

    Bezhev

    Регистр.:
    26 дек 2012
    Сообщения:
    363
    Симпатии:
    124
  3. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    213
    Симпатии:
    47
    Версия: 5.5

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

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

    тогда вопрос как осуществить фильтр тогда? через join? не особо понимаю
     
    Последнее редактирование модератором: 20 фев 2016
  4. Bezhev

    Bezhev

    Регистр.:
    26 дек 2012
    Сообщения:
    363
    Симпатии:
    124
    Обычный Json можно будет запихать только в обычный текст) и в этом случае - только лайком)
    Или, если есть возможность обновится до 5.7 и заюзать нативный json :)

    p.s. была еще статья на хабре, с реализацией через redis Перейти по ссылке
     
    SocMaster нравится это.
  5. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    528
    Симпатии:
    246
    Если не слишком много фильтров - моешь создать таблицу вида : id | id_obj | tv | dvd...
    когда применишь фильтр к объявлению - добавляется строка 1 | 123 | 1 | 0
    При сортировке - элементарно SELECT * FROM filter WHERE tv = 1; и получаешь объявления с пометкой tv
     
  6. Bezhev

    Bezhev

    Регистр.:
    26 дек 2012
    Сообщения:
    363
    Симпатии:
    124
    ТС написал ведь:
    200 фильтров... предлагаешь 200 колонок? :)
     
  7. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    213
    Симпатии:
    47
    Очень умно..
    фильтры создаются через админку, прикрепляются к категориям. понятно же что их будет очень много
     
  8. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    528
    Симпатии:
    246
    второй вариант: есть таблица(типа справочник) в которой перечислены 200 строк с фильтрами id | name... допустим ты указываешь товару что он относиться к "tv" (а tv имеет в этой табличке например id = 7)
    В таблице (назовем ее связь) при указании фильтра добавляется строка
    id | id_objavleniya | id_filtra
    1 | 123 | 7
    таким образом, когда на сайте поставят чекбокс на фильтр tv, скрипт идет в справочник смотрит какой id у параметра tv (7). После, с этим параметром отправляется в таблицу связь, и просит показать какие объявления имеют этот параметр.
     
  9. Bezhev

    Bezhev

    Регистр.:
    26 дек 2012
    Сообщения:
    363
    Симпатии:
    124
    а если фильтр цвет? получится 100500 записей с цветом? мне кажется с редиской как раз то что нужно.
     
  10. SocMaster

    SocMaster aka Hakerok

    Регистр.:
    26 июл 2011
    Сообщения:
    213
    Симпатии:
    47
    Это есть
    выше как раз этот вариант же описывал? или нет?
    А как потом, вытянуть из одной таблицы объявы связав их с справочником?