php
  • mysql
  • select
  • where
  • 2013-03-04 37 views -1 likes 
    -1

    我有以下问题:我想让用户将过滤器应用于数据库搜索。 我有三个过滤器,A,B和C.所有这些过滤器都可以是“空的”,因为用户不关心它们并选择“任何”。现在我想检查这个查询对数据库记录。我使用的是正常的MySQL查询在PHP和MySQL可选WHERE条件

    $db_q = "Select * from table where row1 = '" . $A . "' and row2 = '" . $B . "' and row3 = 
    '" . $C . "'"; 
    

    只要用户输入特定的A,B,C任何能正常工作(!=“任何”)。当选择“any”时,我得到如下的结果:“select * from table where row1 =”any/all“等等。”我似乎无法弄清楚正确的语法(如果它甚至可能),我想避免混乱的情况区分(如果A ==任何,执行选择;如果B ==空...等等)。

    任何帮助,非常感谢。

    +1

    用户是否选择框从选择滤波器? – 2013-03-04 22:10:04

    +0

    请修改您的标题以更具描述性。 – 2013-03-04 22:11:03

    +3

    如果一个字段未被填充/选择了'any',则不要添加该条件:构建sql语句的第一部分并根据其值添加条件。 – jeroen 2013-03-04 22:11:36

    回答

    0

    查询之前,你可以使用:

    $tmp = "where "; 
    if($A and $A!="any" and $A!="not used") 
    $tmp .= "row1 = '".$A."'"; 
    if($B and $B!="any" and $B!="not used") 
    $tmp .= "AND row2 = '".$B. "'"; 
    if($C and $C!="any" and $C!="not used") 
    $tmp .= "AND row3 = '".$C."'"; 
    $db_q = "Select * from table $tmp"; 
    
    +1

    如果'$ A'有任何/未使用,该怎么办?编辑:你的查询就像'从表中选择* where row2 ='B''。 – 2013-03-04 22:16:24

    +0

    在if语句中添加“和”。我编辑了代码 – MIIB 2013-03-04 22:16:41

    +0

    这工作完美。我忘了提及,如果A ==任何,B或C不必等于任何。这意味着它可以自由组合。所以我调整了你的代码(否则,如果A ==任何,我遇到了不应该在第一个条件的AND的麻烦)。但简单而有用的答案。非常感谢! – user1889382 2013-03-04 22:34:06

    0

    试试这个:

    $db_q = "Select * from table "; 
    
    if ($A != "any" || $B != "any" || $C != "any") 
    { 
        $db_q .= "where "; 
    } 
    
    $firstCondition = true; 
    
    if ($A != "any") 
    { 
        if (!$firstCondition) 
         $db_q .= "and "; 
    
        $db_q .= "row1 = '$A' "; 
        $firstCondition = false; 
    } 
    
    if ($B != "any") 
    { 
        if (!$firstCondition) 
         $db_q .= "and "; 
    
        $db_q .= "row2 = '$B' "; 
        $firstCondition = false; 
    } 
    
    if ($C != "any") 
    { 
        if (!$firstCondition) 
         $db_q .= "and "; 
    
        $db_q .= "row3 = '$C' "; 
        $firstCondition = false; 
    } 
    
    3

    其他的答案大多是正确的,但是这是为了完成一个简单的方法是需要什么:

    $where = array(); 
    
    
    if($A != 'any'){ // or whatever you need 
        $where[] = "A = $A'"; 
    } 
    if($B != 'any'){ // or whatever you need 
        $where[] = "B = $B'"; 
    } 
    if($C != 'any'){ // or whatever you need 
        $where[] = "C = $C'"; 
    } 
    
    $where_string = implode(' AND ' , $where); 
    
    $query = "SELECT * FROM table"; 
    
    if($where){ 
        $query .= ' ' . $where_string; 
    } 
    

    这将允许条件和扩展的任意组合。

    0

    试着做这样的事情:

    if @param1 is not null 
        select * from table1 where col1 = @param1 
    else 
        select * from table1 where col2 = @param2 
    

    这可以写成:

    select * from table1 
    where (@param1 is null or col1 = @param1) 
        and (@param2 is null or col2 = @param2) 
    

    得到了巴伦·施瓦茨的博客的想法:https://www.xaprb.com/blog/2005/12/11/optional-parameters-in-the-where-clause/

    相关问题