[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Динамический фильтр, склейка запроса из $_GET
Igon
Имеется массив, который я получаю с ссылки вида site.com/?cpu=1,2&brand=2,3&ram=2,3 методом $_GET

    array(3) {
["cpu"]=>
string(3) "1,2"
["brand"]=>
string(3) "2,3"
["ram"]=>
string(3) "2,3"
}

Как мне из данного массива склеить запрос следующего содержания?

SELECT * FROM table WHERE cpu=1 OR cpu=2 AND brand=2 OR brand=3 AND ram=2 OR ram=3


Пытался как-то сделать вот так, но видимо имею неправильное представление о реализации.

foreach($request->all() as $name => $value) {
$valuesArray = explode(',', $value);
foreach($valuesArray as $row) {
$sql[] = 'WHERE ' . $name . '=' . $row;
}
}


P.S Делаю динамический фильтр, который выдает найденные позиции запрос у которого генерируется через $_GET
Kusss
// входные данные
$_GET = [
'cpu' => '1,2',
'brand' => '2,3',
'ram' => '2,3',
];


$where = [];
// смотрим только эти значения
$array = ['cpu', 'brand', 'ram'];

foreach ($array AS $value){
if (isset($_GET[$value]) ) {
$_temp = [];
foreach (explode(',', $_GET[$value]) AS $val){
// проверяем что имеем именно число
if (is_numeric($val))
$_temp[] = $val;
}

// Если есть значения
if (count($_temp))
$where[] = '`'. $value .'` IN (' .implode(',', $_temp). ')';
}
}

$where = count($where) ? implode(' AND ', $where) : 1;
echo $where; // `cpu` IN (1,2) AND `brand` IN (2,3) AND `ram` IN (2,3)

кое что исправил
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.