Как упростить обработку очень большой формы?

Копался в архивах своих... и нашел одну большую статистическую форму. Поиск объектов по огромной туче параметров.
Грубо говоря запрос получается следующим:

SELECT * FROM ... as A INNER JOIN ... as B .... и так 6 таблиц WHERE 1=1 и далее десятки AND

Поля примерно такие...
есть чекбоксы - тогда имплодим значения и получаем ... AND pokazatel IN ($checkbox_values)
есть поле (селект > < =) и текстовый инпут, тогда получаем AND pokazatel $select_value.$input_value

в общем суть в том, что каждый показатель приходилось тогда ручками прописывать... получилось порядка 3000 тыщ строк) и сейчас поменять что-либо ... это проще все удалить.
Есть рецептик? куда почитать-посмотреть?
  • Вопрос задан
  • 274 просмотра
Пригласить эксперта
Ответы на вопрос 3
@asperin2
PHP разработчик
Я бы создал массив параметров, что-то наподобие
$data = [1 => ['param' => 'name', 'cond' =>'=', 'value' => $name],
              2 => ['param' => 'age', 'cond' =>'>', 'value' => $age],
              .......
]

Потом через foreach добавить в запрос... намного удобнее контролировать параметры так.
Ответ написан
Комментировать
@JuniorNoobie
Сижу в поддержке, пишу мелкие проекты
Для рядовых пользователей можно эту форму-фильтр упростить. Для продвинутых предоставить возможность самим писать фильтры на псевдоязыке, используя "И/ИЛИ", "СОДЕРЖИТ" и пр. Затем просто строку парсите, разбираете и составляете нормальный запрос.

Или же собираете всю инфу с форму в xml и отправляете в БД, где разбираете на составляющие. При изменении формы (добавлении новых столбцов) нужно будет лишь изменять процедуру разбора в БД. А если напишите универсальную, то и этого делать не придется.
Ответ написан
Комментировать
DVamp1r3
@DVamp1r3
Java/PHP программист
через foreach и рефлексию пройдитесь по всем параметрам, в зависимости от типа генерируете куски запроса. но и имена элементов формы делаете с префиксом типа данных, чтобы ожидать, какие значения должны быть.
Ответ написан
Ваш ответ на вопрос

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

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