Поиск с необязательными параметрами

PIT

Новичок
Поиск с необязательными параметрами

Здравствуйте, форумчане!
Возник такой вопрос, поиск юзал результатов не дал.

У меня есть форма поиска, в которой пользователь выбирает параметры. На основе этих параметров составляется sql запрос для выборке нужных записей из базы.
Проблема в том, что параметры поиска могут присутствовать а могут и нет.

Хочу посоветоваться, как лучше формировать sql - запрос. Потому что вариант с проверками в пхп типа:

$sql = "SELECT * FROM `models` WHERE `mark = 2` ";
if ($attr1 != 0) $dop1 = " AND `attr1` = '".$attr1."'";
...............

$sql = $sql.$dop1.$dop2 ........... $dopn;

Не очень нравится.
Заранее спасибо.
 

PIT

Новичок
Ну думал может какой другой метод есть поэлегантней =)
Не ну если нету то таким придётся
 

berkut

Новичок
что хреново, так если не будет вшитого парметра mark=2, тогда с AND косяк. чуток получше
$clause_and[] = 'attr1 = 1';
$clause_and[] = 'attr2 = 2';
WHERE ' . implode(' AND ', $clause_and)
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Кто проверяться? ;)
1? Нет.

Это условие, которое всегда истинно.
То-есть типа where вообще нет.

И оч.часто запрос на выборку "расширятся" именно таким образом.
типа
PHP:
$sql  = 'SELECT * FROM `table` WHERE 1';
if (isset($_GET['f1'])){
    $sql .= ' AND f1=1';
}
if (isset($_GET['f2'])){
    $sql .= ' AND f2=2';
}
И т.д.

-~{}~ 05.04.08 22:49:

.

Ну или
PHP:
$sql  = 'SELECT * FROM `table` WHERE 1';
$sql .= isset($_GET['f1'])?' AND f1=1':'';
$sql .= isset($_GET['f2'])?' AND f2=2':'';
 

berkut

Новичок
меня больше интересует, отрабатывает-ли 1 при
WHERE 1 AND field = val
или оптимизатор выкидывает 1 из запроса
 

Gas

может по одной?
berkut
в терминах "выкидывает/не выкидывает" сказать не могу, но:
- значение учитывается, если вместо 1 поставить 0 - то сразу же возвращается пустой результат, без обращения к таблице;
- если на `field` есть индекс, полного перебора таблицы не происходит. Можешь считать что "выкидывает".
 
Сверху