PHP mysql查询生成器,显示我想要的

时间:2015-09-20 10:47:34

标签: php mysql search

我对PHP比较新,我需要一些关于搜索查询的帮助。

我有一些下拉菜单选择'和一个复选框组'这将使用(... WHERE somethingA =' somethingA'&& somethingB =' somethingB' etc)来过滤数据库中的搜索。

这一切都很有效,但问题出现的时候我想要这样做,以至于必须使用一些搜索字段,所以如果' SomethingA'是禁用还是值='无'那么它只会返回什么东西B =' SomethingB'。

我尝试过使用OR而不是AND,但是如果它们为true则返回两个值,而不是正确地过滤它们。

我的初始解决方案是使用if..else语句来定义查询, 例如:

$query = "SELECT * FROM table";        
$results = $con->query("$query $where $QueryA $QueryB $QueryC");

if($_GET['SomethingA'] == "none" && $_GET['SomethingB'] == "none" && $_GET['SomethingC'] == "none"){
$where = ""
$QueryA = ""
$QueryB = ""
$QueryC = "ORDER by ID" //if all search field is 'none' then get all results
}elseif($_GET['SomethingB'] == "none" && $_GET['SomethingC'] == "none"){
$where = "WHERE"
$QueryA = "SomethingA = '{SomethingA}'" //only use A filter one field
$QueryB = ""
$QueryC = "" 
}elseif($_GET['SomethingA'] == "none" && $_GET['SomethingC'] == "none"){
$where = "WHERE"
$QueryA = ""
$QueryB = "SomethingB = '{SomethingB}'" //only use B filter one field
$QueryC = "" 
.....

它可以工作,但你已经可以看到问题,好像我想要交叉矩阵的所有条件,它变得非常冗长和令人困惑。 所以我的问题是,是否有更好的方法来做到这一点,例如,make value =' none'返回所有结果?

一直环顾四周,从多个角度攻击它,但无法找到解决方案.. 也许javascript可以提供帮助,但我不是最好的。

提前致谢

1 个答案:

答案 0 :(得分:1)

问题不是太明确,但请研究一下。它应该有所帮助。

$query="SELECT * FROM table WHERE";
$query_link = " AND ";
$isASet=false;
$isBSet=false;
$isCSet=false;

if(strcmp($_GET['SomethingA'],"none") != 0){
    $query.=" column = {$_GET['SomethingA']}";

    //set this to true for later if statements
    $isASet=true;
}


if(strcmp($_GET['SomethingB'],"none") != 0){
    //check if A has been set, if yes include an AND
    if($isASet){
        $query.=$query_link;
    }
    //include this one as usual
    $query.=" column = {$_GET['SomethingB']}";
    $isBSet=true;
}

if(strcmp($_GET['SomethingC'],"none") != 0){
    //check if A or B has been set, if yes include an AND
    if($isASet || $isBSet){
        $query.=$query_link;
    }
    //include this as usual
    $query.=" column = {$_GET['SomethingC']}";
}

//run query and collect result
$result = $connection->query($query);