好的,我这里有问题......
我通过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汽车展示......
我是否必须为每个案例编写一个查询语句,还是有另一种方式?
答案 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。