Rumych
12.12.2013 - 19:30
Добрый день.
Есть форма поиска товаров с 6 полями(например название, производитель, цена и т.д).
Все поля формы необязательны для заполнения.
Как составить запрос к БД на основании введенных данных.
Т.е. пользователь может заполнить как одно поле так и 2, и 3 ....
Комбинаций может быть много например 1,2; 2,6; 2,3,4; 5,6; 3,4,5,6; 1,2,3,4,5,6 и т.д.
Подскажите алгоритм составления SQL запроса в этом случае.
Спасибо.
if (!empty($_REQUEST['ololo'])) {
Rumych
12.12.2013 - 19:55
В принципе тему можно закрыть .
Уже сделал.
Всем спасибо за проявленный интерес.
Valick
12.12.2013 - 20:18
Ну так покажите.
Если правильно - пригодится другим, если неправильно - поправим.
_____________
Стимулятор ~yoomoney - 41001303250491
Rumych
12.12.2013 - 20:47
Ну я все поля формы проверяю, если поле заполнено то записываю его содержимое в массив в котором ключ - название поля в таблице, значение - то, что пришло из формы.
Таким образом в массиве будут только заполненные поля формы(будь их хоть 100).
А затем уже составляю запрос к базе используя LIKE и AND перебирая массив.
Только после этого убирал символы в конце получившейся строки (там получается AND нужно убрать)
И уже получившуюся SQL строку передаю в функцию запроса к базе.
Как-то так.
Valick
12.12.2013 - 21:13
Rumych, вообще-то достаточно было бы кода.
_____________
Стимулятор ~yoomoney - 41001303250491
Rumych
12.12.2013 - 21:20
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;
}
}