如何按 PHP / MySQL 中的价格范围进行过滤?
How to filter by price ranges in PHP / MySQL?
我正在尝试创建一个函数来根据价格范围过滤掉产品。
用户一次可以select多个价格范围(通过复选框)。复选框如下所示:
<label>0-500 <input type="checkbox" name="price[]" value="1"/></label>
<label>500-1000 <input type="checkbox" name="price[]" value="2"/></label>
<label>1000-2000 <input type="checkbox" name="price[]" value="3"/></label>
当用户提交选中了 2 个复选框的过滤器表单时,它会向我发送一个如下所示的数组 [0 => "2", 1 => "3"]
。
然后我会通过 SQL 查询过滤产品(SELECT * FROM ... WHERE price > 500 AND price < 2000
// 非常简单)。
问题是我不知道如何正确地从数组中获取这些价格范围,其中没有具体包含它。
非常感谢您的帮助。
提前致谢!
您需要以某种方式对其进行映射。例如 value="1" 表示 "0-500"。
另一种解决方案是将值设置为实际范围,然后解析它并获得最低和最高价格:
<label>0-500 <input type="checkbox" name="price[]" value="0-500"/></label>
<label>500-1000 <input type="checkbox" name="price[]" value="500-1000"/></label>
<label>1000-2000 <input type="checkbox" name="price[]" value="1000-2000"/></label>
在这种情况下,您的数组将如下所示:
[0 => "500-1000", 1 => "1000-2000"]
解析字符串并插入 sql 查询
试试这个,
//parameter like [0 => "2", 1 => "3"]
function getQuery($form){
$query = "SELECT * FROM yourtable WHERE false";
if (in_array("1", $form)){
$query .= " OR price >= 0 AND price <= 500";
}
if (in_array("2", $form)){
$query .= " OR price >= 500 AND price <= 1000";
}
if (in_array("3", $form)){
$query .= " OR price => 1000 AND price <= 2000";
}
return $query;
}
该函数将return根据您的复选框数组进行查询
编辑
(有Aris想法)
//parameter like [0 => "500-1000", 1 => "1000-2000"]
function getQuery($form){
$query = "SELECT * FROM yourtable WHERE false";
foreach ($form as $range){
$ranges = explode("-", $range);
$from = ranges[0];
$to = ranges[1];
$query .= " OR BETWEEN $from AND $to";
}
return $query;
}
我正在尝试创建一个函数来根据价格范围过滤掉产品。
用户一次可以select多个价格范围(通过复选框)。复选框如下所示:
<label>0-500 <input type="checkbox" name="price[]" value="1"/></label>
<label>500-1000 <input type="checkbox" name="price[]" value="2"/></label>
<label>1000-2000 <input type="checkbox" name="price[]" value="3"/></label>
当用户提交选中了 2 个复选框的过滤器表单时,它会向我发送一个如下所示的数组 [0 => "2", 1 => "3"]
。
然后我会通过 SQL 查询过滤产品(SELECT * FROM ... WHERE price > 500 AND price < 2000
// 非常简单)。
问题是我不知道如何正确地从数组中获取这些价格范围,其中没有具体包含它。
非常感谢您的帮助。 提前致谢!
您需要以某种方式对其进行映射。例如 value="1" 表示 "0-500"。
另一种解决方案是将值设置为实际范围,然后解析它并获得最低和最高价格:
<label>0-500 <input type="checkbox" name="price[]" value="0-500"/></label>
<label>500-1000 <input type="checkbox" name="price[]" value="500-1000"/></label>
<label>1000-2000 <input type="checkbox" name="price[]" value="1000-2000"/></label>
在这种情况下,您的数组将如下所示:
[0 => "500-1000", 1 => "1000-2000"]
解析字符串并插入 sql 查询
试试这个,
//parameter like [0 => "2", 1 => "3"]
function getQuery($form){
$query = "SELECT * FROM yourtable WHERE false";
if (in_array("1", $form)){
$query .= " OR price >= 0 AND price <= 500";
}
if (in_array("2", $form)){
$query .= " OR price >= 500 AND price <= 1000";
}
if (in_array("3", $form)){
$query .= " OR price => 1000 AND price <= 2000";
}
return $query;
}
该函数将return根据您的复选框数组进行查询
编辑
(有Aris想法)//parameter like [0 => "500-1000", 1 => "1000-2000"]
function getQuery($form){
$query = "SELECT * FROM yourtable WHERE false";
foreach ($form as $range){
$ranges = explode("-", $range);
$from = ranges[0];
$to = ranges[1];
$query .= " OR BETWEEN $from AND $to";
}
return $query;
}