php
  • mysql
  • select
  • where
  • 2013-03-04 51 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/

    相關問題