не все поля обязательны для заполнения. Если он выберет все поля - то проблем нет - запрос будет типа SELECT ..... WHERE mark_id='$mark_id', model_id='$model_id', city_id='$city_id', price >='$price'.
Но вот что делать, если некоторые поля пустые? В моём случае пользователь ввёл только 1 поле - марку, и GET выглядет так:
http://site.ru/index.php?search=yes& … r_year_to=
Как видите< у всего кроме Марки, ID="". Это чтоже получается? Мне средствами скрипта надо проверять каждую переменную на пустоту и в зависимости от этого составлять отдельно WHERE? Куча IF ELSEIF получится, например:
if($mark_id != "") $where = "WHERE mark_id='$mark_id'";
if($model_id != "") $where = "WHERE model_id='$model_id'"
$query = "SELECT ...... FROM cars $where";
А если учесть сколько комбинаций из этих параметров (например - указана марка но неуказана цена или наоборот) - это штук 50 IF-ов получится. Дебилизм какой-то. Что-то мне подсказывает что я туплю. Помогите, плиз!
Спустя 6 минут, 16 секунд (28.01.2009 - 11:24) kirik написал(а):
Цитата (alex666 @ 28.01.2009 - 03:17) |
Мне средствами скрипта надо проверять каждую переменную на пустоту и в зависимости от этого составлять отдельно WHERE? |
Ага.. По-другому никак.
Могу предложить вариант по-проще -
PHP |
$query[] = !empty($_GET['mark_id']) ? "`mark_id` = '{$_GET['mark_id']}'" : null; //проверяем на пустоту переменную |
Если для каждого поля будут разные варианты (OR/AND) то все зависит от ваших нужд
Спустя 5 минут, 28 секунд (28.01.2009 - 11:29) sergeiss написал(а):
Тут без ИФоф не обойтись. Но лучше так сделать: формируешь полный список параметров (без слова WHERE!!!), и только потом вставляешь его в условие. Сравни со своим вариантом:
PHP |
$where=""; |
Добавку ' and ' к списку условий можно оформить как функцию, чтобы и удобнее было писать, и универсальнее.
PS. И опять kirik опредил ...
Спустя 9 минут, 29 секунд (28.01.2009 - 11:39) twin написал(а):
Есть еще проще вариант, передавйте данные массивом, а в запросе разбирайте его на ключ-значение.
Спустя 5 минут, 40 секунд (28.01.2009 - 11:44) alex666 написал(а):
А, всё, спасибо народ, вроде разобрался! ТЕМА ЗАКРЫТА!