[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Динамический запрос
Rumych
Добрый день.
Есть форма поиска товаров с 6 полями(например название, производитель, цена и т.д).
Все поля формы необязательны для заполнения.
Как составить запрос к БД на основании введенных данных.
Т.е. пользователь может заполнить как одно поле так и 2, и 3 ....
Комбинаций может быть много например 1,2; 2,6; 2,3,4; 5,6; 3,4,5,6; 1,2,3,4,5,6 и т.д.
Подскажите алгоритм составления SQL запроса в этом случае.
Спасибо.
Aeq
if (!empty($_REQUEST['ololo'])) {
Rumych
В принципе тему можно закрыть .
Уже сделал.
Всем спасибо за проявленный интерес.
Valick
Цитата
Уже сделал.

Ну так покажите.
Если правильно - пригодится другим, если неправильно - поправим.

_____________
Стимулятор ~yoomoney - 41001303250491
Rumych
Ну я все поля формы проверяю, если поле заполнено то записываю его содержимое в массив в котором ключ - название поля в таблице, значение - то, что пришло из формы.
Таким образом в массиве будут только заполненные поля формы(будь их хоть 100).
А затем уже составляю запрос к базе используя LIKE и AND перебирая массив.
Только после этого убирал символы в конце получившейся строки (там получается AND нужно убрать)
И уже получившуюся SQL строку передаю в функцию запроса к базе.
Как-то так.
Valick
Rumych, вообще-то достаточно было бы кода.

_____________
Стимулятор ~yoomoney - 41001303250491
Rumych
private function prepareSQL($name, $autor, $price, $publishion, $year, $category)
{
$arr = array();

$this->sql = 'SELECT * FROM books WHERE ';
//////////////////////////////////////////////////////
if ($name != '')
{
$arr['name'] = $name;
}
//////////////////////////////////////////////////////////
if ($autor != '')
{
$arr['autor']= $autor;
}
//////////////////////////////////////////////////////////////////////////////
if ($price != '')
{
$arr['price']= $price;
}

////////////////////////////////////////////////////////////////////////////////
if ($publishion != '')
{
$arr['publishing'] = $publishion;
}

/////////////////////////////////////////////////////////////////////////////////////
if ($year != '')
{
$arr['year']= $year;
}

/////////////////////////////////////////////////////////////////////////////////////
if ($category != '')
{
$arr['category'] = $category;
}

if (sizeof($arr) != 0)
{
foreach ($arr as $key => $value)
{
$this->sql.= $key.' LIKE "%'.$value.'%" AND ';
}
$this->sql = substr($this->sql, 0, -4);
return $this->sql;
}
else
{
$this->sql = false;
return $this->sql;
}
}
Быстрый ответ:

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