MySQL запрос PHP вопрос - PullRequest
       14

MySQL запрос PHP вопрос

1 голос
/ 13 октября 2009

Хорошо, у меня проблема здесь ...

Я отправляю значения выпадающих списков через 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» ... Поля являются необязательными, поэтому, если пользователь не вводит «price from» или «year from», пользователь хочет ВСЕ автомобили, чтобы показать ...

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

Ответы [ 4 ]

4 голосов
/ 13 октября 2009

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

Например:

$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);
}
1 голос
/ 13 октября 2009

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

if (!isset($cars_mileage_to))
    $cars_mileage_to = 500000;
0 голосов
/ 13 октября 2009

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

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

не забудьте подтвердить ввод. Например, с помощью firebug легко добавить немного вкусного sql.

0 голосов
/ 13 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...