2009-10-13 6 views
1

У меня проблема ...mysql PHP query question

Я отправляю значения выпадающих списков через ajax в этот PHP-файл.

Теперь я хочу, чтобы найти базу данных MySQL с использованием этих значений, которые мне удалось сделать, НО, только если установить значения на что-то ...

Посмотрите:

 $query = "SELECT * FROM cars_db WHERE price BETWEEN '$cars_price_from' AND '$cars_price_to' AND year BETWEEN '$cars_year_from' AND '$cars_year_to' AND mileage BETWEEN '$cars_mileage_from' AND '$cars_mileage_to' AND gearbox = '$cars_gearbox' AND fuel = '$cars_fuel'"; 

Теперь, что, если пользователь не выбирает какие-либо «price_from» или «year_from» ... Эти поля являются необязательными, поэтому, если пользователь не вводит какую-либо «цену от» или «год от», тогда пользователь хочет, чтобы ВСЕ автомобили показать ...

Должен ли я писать инструкцию запроса для каждого случая или есть другой способ?

+2

Вы по существу задал тот же вопрос 14 минут до этого. Эффективно отредактировать исходный вопрос, если вы хотите его прояснить. Не отправляйте один и тот же вопрос дважды. –

ответ

0

Вы можете построить запрос, добавив часть «где», только если ваши переменные отличаются от «».

+0

любой код для этого? – 2009-10-13 15:54:55

+0

См. Http://stackoverflow.com/questions/1560980/php-help-with-building-query/1561105#1561105 –

1

Вы можете просто определить, какие параметры отсутствуют в вашем PHP-коде и заполнить подходящее значение по умолчанию. например

if (!isset($cars_mileage_to)) 
    $cars_mileage_to = 500000; 
0

или если вы используете MySQL 5.x, вы можете также использовать подзапросы:

http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

не забудьте подтвердить ввод. Это тривиально с firebug, например, чтобы добавить какой-нибудь вкусный sql.

4

Я делаю что-то похожее на davethegr8, за исключением того, что я помещаю свои условия в массив, а затем взорваюсь в конце, поэтому мне не нужно беспокоиться о том, какие условия были добавлены и нужно ли добавлять дополнительные И.

Например:

$sql = "SELECT * FROM car_db"; 

// an array to hold the conditions 
$conditions = array(); 

// for price 
if ($car_price_from > 0 && $car_price_to > $car_price_from) { 
    $conditions[] = "(price BETWEEN '$cars_price_from' AND '$cars_price_to')"; 
} 
elseif ($car_price_from > 0) { 
    $conditions[] = "(price >= '$cars_price_from')"; 
} 
elseif ($car_price_to > 0) { 
    $conditions[] = "(price <= '$cars_price_from')"; 
} 
else { 
    //nothing 
} 

// similar for the other variables, building up the $conditions array. 

// now append to the existing $sql 
if (count($conditions) > 0){ 
    $sql .= 'WHERE ' . implode(' AND ', $conditions); 
}