我对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可以提供帮助,但我不是最好的。
提前致谢
答案 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);