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

Как правильно сформировать запрос данных по фильтру параметров?

5fe9f3baf1b63962814458.png
Есть запрос к БД.
$poisks = DB::select("select * from items where brand = '$brand' && fuel_type IN('$fuel_type') && location = '$location' && body_type IN('$body_type') && year BETWEEN '$year_from' AND '$year_to' && price BETWEEN '$price_from' AND '$price_to' && engine BETWEEN '$engine_from' AND '$engine_to'");

При выборе из каждого блока селекта или чекбоксов запрос работает.
Как быть, когда какой-либо один или несколько селектов или блок чекбоксов , к примеру "Тип топлива" или "Марка" не выбраны, и $brand = $_POST['brand']; "brand" => "" и соответственно $brand пустая.
Как в запросе не учитывать параметр когда переменная пустая ?
  • Вопрос задан
  • 144 просмотра
Подписаться 1 Простой Комментировать
Решение пользователя CarfikDK К ответам на вопрос (3)
@Carfik
Автор говнокода
Сделай переменную какая будет в случае чего добавльять опциональные параметры.
Например:
$where = '';
if($_POST['brand']){
    $where .= ' brand = ' . $_POST['brand'];
}

$poisks = DB::select("select * from items where ". $where ." && fuel_type IN('$fuel_type') && location = '$location' && body_type IN('$body_type') && year BETWEEN '$year_from' AND '$year_to' && price BETWEEN '$price_from' AND '$price_to' && engine BETWEEN '$engine_from' AND '$engine_to'");


Тут есть косяк с тем, что долен быть хоть какой то параметр require что бы для переменной $where можно было сразу вписать AND и через другие проверки эту переменную разсширать. Просто я хз как проверить будет ли это условие первым и нужно ли добавлсять AND, или оставить WHERE

Не то чтобы по хорошему, но чтобы работало:

$where = '';
if($_POST['brand']){
    $where .= 'AND brand = ' . $_POST['brand'];
}
if($_POST['fuel_type']){
    $where .= " AND fuel_type IN(". implode(',' , $_POST['fuel_type']) .");
}

$poisks = DB::select("select * from items where (что-то, что всегда будет проверяться) ". $where );
Ответ написан