MySQL Query根据下拉列表条目的选择选择多个条目

时间:2014-06-02 06:13:08

标签: php mysql sql sql-server

我遇到了MySQL查询的逻辑问题,并希望就使用何种类型的细化提供一些建议。

出于解释问题的目的,假设您有3个名为ListA,ListB和ListC的下拉列表。 ListA的人口为Cat1,Cat2,Cat3,ListB,Cat4,Cat5,......等等。

因此,3个列表共有9个类别。这些列表是通过扫描数据库中的不同条目然后填充列表生成的,因此搜索细化将随着新条目和类别的创建而自动增长。

我的问题是多个类别的选择查询,因为我希望用户能够选择他们运行的搜索的精确程度。所以使用ListA会给出一点改进,ListA和ListB会像大多数搜索引擎一样精炼更多等等。但是我的查询需要100%的数据输入才能选择,好像什么都没有输入一样,它会寻找一个永远不会发生的空白空间,从而什么都不返回。

所有变量都是通过post发送的,并通过收集它们存储为处理页面中的变量,然后使用if语句将它们分配给变量来检测值,起初我以为我可以用任意值填充条目,如果它是空的,但我找不到一个永远都是真的,我看着BOOLEAN但是也无法使它工作。

我使用以下查询:

SELECT * FROM classifieds WHERE listA = "'.listA.'" AND listB = "'.listB.'" AND listC = "'.listC.'"

查询需要是AND逻辑,因此它会查找满足所有要求的条目,但是如果例如ListB没有填充,因为用户没有被该字段打扰(说它是价格而用户并不关心) ,我怎么能让它忽略该部分或让它不挑剔。

对于where子句是否存在通用查询,即使其空白也可用于选择它?

我确定这里会有一些重复,但我不确定它会被称为什么,因为我见过的每一个星期都是完全不同的。我知道我可以用准备好的查询来做到这一点,但我需要为每个活动框组合设置一个逻辑数组,而对于2-3这样的情况,我有10个以上的选择器,而且选择太多了。

任何人都可以帮助我了解完成此任务的方向吗?它似乎非常简单,但却是一种痛苦的工作。

由于

3 个答案:

答案 0 :(得分:1)

这会有帮助吗?

where ("'.listA.'" = '' or listA = "'.listA.'")
  and ("'.listB.'" = '' or listB = "'.listB.'")
  and ("'.listC.'" = '' or listC = "'.listC.'")

答案 1 :(得分:1)

您可以基于条件编写查询。例如,

以下代码将允许您仅访问USER Selected和您的查询根据用户搜索条件运行的变量。

    $whereArr = array();
    if(isset($_REQUEST['listA'])) {
        $whereArr[] = " listA = '" . $_REQUEST['listA'] . "'";
    }
    if(isset($_REQUEST['listB'])) {
        $whereArr[] = " listB = '" . $_REQUEST['listB'] . "'";
    }
    if(isset($_REQUEST['listC'])) {
        $whereArr[] = " listC = '" . $_REQUEST['listC'] . "'";
    }

    $where_Clause = " ";
    if(count($whereArr) > 0) {
        $where_Clause = " WHERE " . implode(" AND ", $whereArr);
    }


    $query = "SELECT * FROM classifieds " . $where_Clause;

答案 2 :(得分:0)

将描述过滤器的变量设为:

string filters = "where ";

假设您有10个过滤器,即A,B,C .....将它们保持在阵列中 遍历数组时,检查选择了哪一个,并将其添加到过滤器变量中:

filter+="listA='sometext'";// here filter A was selected

同样可以添加其他过滤器。

filter+="and listB='sometext'";// here filter B was selected after A ,while traversing through the loop; 

进行一些调整以在第二次过滤之后添加'和'

过滤字符串现在将显示为

filter = "select * from table where listA='sometext' and listB='sometext'";

然后在查询字符串中使用变量过滤器:

query="select * from table "+filter;  

(照顾中间所需的空格)

希望这有帮助