PHP MySQL: правильный / простой способ реализации динамической фильтрации

0

Мне нужно предложение о подходе или алгоритме или инструментах для удовлетворения моих потребностей; Динамическая фильтрация в SQL.

Я использую PHP в качестве бэкэнд. Я создаю фильтрацию результатов во внешнем интерфейсе следующим образом:

Изображение 174551

Когда вы нажмете OK, я отправлю данные JSON, используя:

JSON.stringify($('#modalFilter input, #modalFilter select').serializeArray())

И это данные:

"[
    {"name":"parameter","value":"state"},
    {"name":"operator","value":"contains"},
    {"name":"value","value":"mel"},
    {"name":"parameter","value":"dateappoint"},
    {"name":"operator","value":"begin"},
    {"name":"value","value":"13/12/2017"}
]"

Моя проблема здесь. На бэкэнд (PHP), после некоторого массирования (связать параметр, выполнить запрос и т.д.), Я получаю очень огромный и уродливый SQL:

SELECT ...
FROM sample_staff
WHERE

    CASE WHEN 'state_contains' = ? THEN state LIKE CONCAT('%',?,'%') END
    CASE WHEN 'state_notcontains' = ? THEN state NOT LIKE CONCAT('%',?,'%') END
    CASE WHEN 'state_is' = ? THEN state = ? END
    CASE WHEN 'state_isnt' = ? THEN state <> ? END
    CASE WHEN 'state_begin' = ? THEN state LIKE CONCAT(?,'%') END
    CASE WHEN 'state_end' = ? THEN state LIKE CONCAT('%',?) END

    CASE WHEN 'dateappoint_contains' = ? THEN dateappoint LIKE CONCAT('%',?,'%') END
    CASE WHEN 'dateappoint_notcontains' = ? THEN dateappoint NOT LIKE CONCAT('%',?,'%') END
    CASE WHEN 'dateappoint_is' = ? THEN dateappoint = ? END
    CASE WHEN 'dateappoint_isnt' = ? THEN dateappoint <> ? END
    CASE WHEN 'dateappoint_begin' = ? THEN dateappoint >= STR_TO_DATE(?, '%d/%m/%y') END
    CASE WHEN 'dateappoint_end' = ? THEN dateappoint <= STR_TO_DATE(?, '%d/%m/%y') END

Вышеприведенный пример SQL просто обслуживает 2 условия (состояние и данные), но в реальной ситуации мне приходится больше обслуживать. И я надеюсь избежать процедуры хранения только для того, чтобы зацикливать условия.

Я слышал о доктрине, но все еще не уверен, может ли этот инструмент удовлетворить мои потребности или это совершенно другое назначение.

Теги:

1 ответ

1
Лучший ответ

Почему вы не используете jQuery QueryBuilder. Он отвечает вашим потребностям и имеет обширные базовые пакеты для поддержки.

  • 0
    Это не ответ. Пожалуйста, укажите это в разделе комментариев
  • 0
    Извините за опоздание принимаю

Ещё вопросы

Сообщество Overcoder
Наверх
Меню