Запросы к базе

Рейтинг: 0Ответов: 2Опубликовано: 09.12.2014

Добрый день.

Есть база по автозапчастям со следующими столбцами:

id|number|made|part_name|oem

Сейчас нужно сделать поиск, чтобы можно было искать по одному критерию, или по всем сразу, или по нескольким.
Правильно ли я понимаю, что для каждого расклада (выбранного/ых пункта/ов) нужно писать отдельный запрос к базе данных?

То есть выбрал посетитель только made (марку машины), то запрос

("SELECT * FROM somenaw where made like=%$made%")

если выбрал made и part_name (наименование запчасти):

("SELECT * FROM somenaw where made like=%$made% AND part_name like=%$part_name%")

Это получается, для каждого отдельного случая нужно будет запросы писать или можно как-то более универсально сделать?!

Сорри за нубство.

Ответы

▲ 3Принят

По Вашей задаче:

$wh = array();
if($_POST['made'] != ''){
$wh[] = "'made like %".$_POST['made']."%'";
}
if($_POST['part_name'] != ''){
$wh[] = "'part_name like %".$_POST['part_name']."%'";
}
if($_POST['oem'] != ''){
$wh[] = "'oem like %".$_POST['oem']."%'";
}
if(count($wh) != 0){
   $where = ' where ';
   $where .= implode(' and ',$wh);
}
else{
   $where = '';
};

Дальше подставляем в запроc:

("SELECT * FROM somenaw ".$where);

Как-то так. Естественно, перед подстановкой переменных проверяйте их. Мало ли чего пришлют в запросе. Почитайте про sql инъекция.

▲ 1

А что мешает условие WHERE динамически генерировать?

where = '1'
if made_param:
    where += ' AND made like %made_param%'
if year_param:
    where += ' AND year >= year_param'