Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP/MySQL中按价格范围过滤?_Php_Mysql - Fatal编程技术网

如何在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;
}