如何在PHP/MySQL中按价格范围过滤?
我正在尝试创建一个函数,根据价格范围过滤产品 用户可以一次选择更多的价格范围(通过复选框)。复选框如下所示:如何在PHP/MySQL中按价格范围过滤?,php,mysql,Php,Mysql,我正在尝试创建一个函数,根据价格范围过滤产品 用户可以一次选择更多的价格范围(通过复选框)。复选框如下所示: <label>0-500 <input type="checkbox" name="price[]" value="1"/></label> <label>500-1000 <input type="checkbox" name="price[]" value="2"/></label> &l
<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>
0-500
500-1000
1000-2000
当用户提交选中2个复选框的筛选表单时,它会向我发送一个数组,看起来像这样[0=>“2”,1=>“3”]
然后我会通过SQL查询过滤产品(SELECT*FROM…,其中price>500和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>
解析字符串并在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;
}
也许这真的是一个糟糕的用户界面设计问题。也许如果用户可以选择一个最大值和一个最小值会更好?我想了想。但是我看到很少有网站使用这种过滤方式,我更喜欢这种方式。这些网站是如何做到的?我不得不说,作为一个用户,我可能会选择0-9和20-29,但不是10-19!这对我来说真的很奇怪!?!?!?我没有很好地描述它。看一看(带复选框的左侧边栏)来了解我的意思我更喜欢Kiva上发生的事情——它同时更新左列和右列,但这可能有点太复杂,无法实现。这是另一个我非常喜欢的例子。。。谢谢事实上,我试着这样做,但没有按预期的那样工作。我宁愿使用最小-最大输入。您需要读取值,分两部分进行解析,并确保您有两个数字。PHP和mysql之间的数字格式有时会很棘手。也许这就是它不起作用的原因。
//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;
}
//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;
}