mysql PHP查询问题

时间:2009-10-13 15:52:03

标签: php mysql

好的,我这里有问题......

我通过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”,那么用户想要ALL汽车展示......

我是否必须为每个案例编写一个查询语句,还是有另一种方式?

4 个答案:

答案 0 :(得分:4)

我做类似于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 :(得分:1)

您可以简单地检测PHP代码中缺少哪些参数并填写合适的默认值。例如

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

答案 2 :(得分:0)

您可以构建查询,仅当您的变量与“”不同时才添加“where”部分。

答案 3 :(得分:0)

或者如果你使用的是mysql 5.x,你也可以使用子选择:

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

不要忘记验证输入。例如,使用firebug可以注入一些美味的sql。