Задать вопрос
@DmitrijP

Как организовать сортировку бд?

С наступающим, тостериане!
У меня есть база данных test и три колонки : invnum, kab, groups. И есть форма для поиска на сайте (три инпута внутри одной формы для проверки по базе) по задумке любой из инпутов может остаться пустым, и на основе заполненных выполняется сортировка методом формировки нового query,возник вопрос: как лучше реализовать данную сортировку,т.к. считаю что "тысяча и один if" на сайте очень неправильно.

Пользуясь ситуацией, хотел бы поблагодарить всех тех, кто в этом году помогал и давал советы другим тостерианцам, с НГ друзья!
  • Вопрос задан
  • 258 просмотров
Подписаться 3 Простой 6 комментариев
Пригласить эксперта
Ответы на вопрос 2
tsklab
@tsklab
Здесь отвечаю на вопросы.
Когда количество параметров не определено, можно использовать конструкцию:
WHERE ((NOT @P1 IS NULL) AND (SearchLike.Search LIKE '%' + @P1 + '%'))
   OR ((NOT @P2 IS NULL) AND (SearchLike.Search LIKE '%' + @P2 + '%')) 
   OR ((NOT @P3 IS NULL) AND (SearchLike.Search LIKE '%' + @P3 + '%'))

Это часть запроса поиска по таблице Searchlike, по полю search.
Это пример конструкции.
То есть вы передаёте в запрос все параметры, и там уже определяете пустой он или нет.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Фронт: имя веб-поля - как массив
Бэк: обработка в php через foreach (для подготовки данных для формирования запроса к БД)

<form method="POST" action="form.php">
 поле 0<input type="text" value="" name="col[]"><br>
 поле 1<input type="text" value="" name="col[]"><br>
 поле 3<input type="text" value="" name="col[]"><br>
 <input type="submit" value="Отправить">

//form.php
$cols=['invnum', 'kab', 'groups'];
if (isset($_POST['col'])) {
   foreach ($_POST['col'] as $k=>$m) {
      if (!empty(trim($m))) $q[$cols[$k]] = $m; //$q - ассоциативный массив непустых полей.
}
//формируем нужный query-запрос к БД на основе $q-массива.
......

Бонусом: мы скрыли идентификационные имена полей с фронта!
С наступающим, Вас, НГ!
Ответ написан
Ваш ответ на вопрос

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

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