@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 пустая.
Как в запросе не учитывать параметр когда переменная пустая ?
  • Вопрос задан
  • 142 просмотра
Решения вопроса 2
@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 );
Ответ написан
@Loonerd2
Могу посоветовать следующее: Делать условные проверки и дополнять переменную с запросом. Например что-то подобное
if(count($fuel_type)){
    $sql.=" and fuel_type IN('$fuel_type') ";
} 
if(count($location))
{
    $sql.="and location = '$location'";
}

После чего сделать выборку по переменной $sql
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
https://phpdelusions.net/pdo_examples/dynamical_where

Только кузов незывается не Хечбек, а Хачбек.
Ответ написан
Ваш ответ на вопрос

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

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