带范围过滤器的Php搜索查询

时间:2014-06-16 14:12:28

标签: php mysql

我正在尝试进行搜索查询,但不确定如何将所有内容放在一起。我对范围滤波器部分有问题。

我想要实现的目标: 一个搜索表单 1.)如果字段A,B(非空)则放入搜索查询

2。)搜索价格栏(价格范围较低,价格较高) 如果匹配字段A,B(如果它不为空)和价格(如果它在范围内),则包括结果。 (如果搜索字段A,B为空,则显示范围之间存在的所有结果)。

感谢您的时间。

我现在拥有的代码。

    <?php
    ini_set('display_errors', 1); error_reporting(E_ALL);
    session_start();
    include 'connect.php';
    if($_POST) 
    {
    $A = ($_POST['A']);
    $B = ($_POST['B']);
    $C = ($_POST['C']);
    $pricelow = ($_POST['pricelow']);
    $pricehigh = ($_POST['pricehigh']);
    $sql = array();
    if (!empty($A)) {
        $sql[] = "A='$A'";
    }
    if (!empty($B)) {
        $sql[] = "B='$B'";
    }
    if (!empty($C)) {
        $sql[] = "C='$C'";
    }
    if (!empty($price)) {
    for($i = pricelow; $i<pricehigh; $i++){
        $price = $i;
    }
    $sql[] = "price='$price'";
    $sql = implode(' AND ', $sql);
    $sql = "SELECT * FROM Listing" . (!empty($sql)? " WHERE " . $sql: '');
    $result = mysqli_query($con,$sql);
    $output = array();
    // fetch your results
    while( $row = mysqli_fetch_assoc($result) )
    {
        // add result row to your output's next index
        $output[] = $row;
    }
    // echo the json encoded object
    echo json_encode( $output ); 
    }
    ?>

编辑:

$sql = "SELECT * FROM Listing" . (!empty($sql)? " WHERE " . $sql: '') . ("AND" 'price' BETWEEN  "$pricelow" AND "$pricehigh");

编辑:

if (!empty($pricelow) || !empty($pricehigh)) {


        $sql[] =  $pricehigh>= 'price' and  'price'>=$pricelow ;

}
$sql = array();


$sql = implode(' AND ', $sql);
$sql = "SELECT * FROM Listing" . (!empty($sql)? " WHERE " . implode(" AND ", $sql): '');

2 个答案:

答案 0 :(得分:0)

<?php

    ini_set('display_errors', 1); error_reporting(E_ALL);


    session_start();

    include 'connect.php';

    if($_POST) 
    {

    $A = ($_POST['A']);
    $B = ($_POST['B']);
     $C = ($_POST['C']);
     $pricelow = ($_POST['pricelow']);
 $pricehigh = ($_POST['pricehigh']);

     $query = "SELECT * FROM Listing WHERE ";
     $flag = 0;

    if (!empty($A)) {
        $query .= $flag==0?" A='$A' ":" AND A = '$A'";
        $flag = 1;
    }
    if (!empty($B)) {
        $query .= $flag==0?" B = '$B' ":" AND B = '$B'";
        $flag = 1;    
    }
    if (!empty($C)) {
        $query .= $flag==0?" C='$C' ":" AND C= '$C'";
        $flag = 1;
    }

    if ($flag == 0) {
        $query .= " price > $pricelow AND price > $pricehigh"
    }


    $result = mysqli_query($con,$query);

            $output = array();

    // fetch your results
    while( $row = mysqli_fetch_assoc($result) )
    {
        // add result row to your output's next index
        $output[] = $row;
    }

    //your rest of the code
>?

我无法对其进行测试,请尝试报告结果!

答案 1 :(得分:0)

您正在创建条件数组,稍后您尝试将该数组用作字符串。这不起作用,因为生成的查询无效。看一下hereimplode是一个使用分隔符内爆array的函数。如果您使用" AND "作为分隔符,那么您将获得所需的字符串。所以,而不是:

$sql = "SELECT * FROM Listing" . (!empty($sql)? " WHERE " . $sql: '');

执行以下操作:

$sql = "SELECT * FROM Listing" . (!empty($sql)? " WHERE " . implode(" AND ", $sql): '');

你的问题应该解决了。

编辑:

我已阅读您的编辑,我的意思是这个代码:

if (!empty($pricelow) || !empty($pricehigh)) {


        $sql[] =  $pricehigh>= 'price' and  'price'>=$pricelow ;

}
$sql = array();


$sql = implode(' AND ', $sql);
$sql = "SELECT * FROM Listing" . (!empty($sql)? " WHERE " . implode(" AND ", $sql): '');

在构建阵列后,您将再次初始化它,因此您将丢失之前处理过的所有信息。然后你将它内爆两次,这是不需要的。试试这个:

if (!empty($pricelow) || !empty($pricehigh)) {


        $sql[] =  $pricehigh>= 'price' and  'price'>=$pricelow ;

}
$sql = "SELECT * FROM Listing" . (!empty($sql)? " WHERE " . implode(" AND ", $sql): '');