php
  • mysql
  • 2012-08-06 42 views 0 likes 
    0

    下面的SQL查詢不會輸出$ srchRegion & & $ srchCategory字符串,如果兩者都有$ _POST值。爲什麼?sql查詢無法獲得3rd elseif值 - 爲什麼?

    if (($srchRegion!='00') || ($srchRegion!='') && ($srchCategory=='00') || ($srchCategory=='')) { 
        return $query .= "AND region='$srchRegion'"; 
    } elseif (($srchRegion=='00') || ($srchRegion=='') && ($srchCategory!='00') || ($srchCategory!='')) { 
        return $query .= "AND category='$srchCategory'"; 
    } elseif (($srchRegion!='00') || ($srchRegion!='') && ($srchCategory!='00') || ($srchCategory!='')) { 
        return $query .= "AND region='$srchRegion' AND category='$srchCategory'"; 
    } 
    

    有沒有更好的方法來做到這一點?

    +0

    http://stackoverflow.com/questions/7209888/is-it-possible-to-prevent-death-by-parentheses - 這就是你的問題簡而言之。嘗試和使用更少的括號,超過一半你使用的不需要在那裏,這實際上是造成你的問題。你的問題的另一部分是總結[這裏](http://php.net/manual/en/language.operators.precedence.php) – DaveRandom 2012-08-06 10:08:34

    回答

    1

    而不是尋找所有可能的布爾值和雜亂的if-else,爲什麼只是繼續基於填充的相應值附加where子句。

    if($srchRegion != '00' && $srchRegion != '') 
        $query .= " AND region='$srchRegion'"; 
    if($srchCategory != '00' && $srchCategory != '') 
        $query .= " AND category='$srchCategory'"; 
    return $query; 
    

    所以$query作爲查詢構建器,並不斷加入其中,基於$ _ POST值條款被設置。

    +0

    謝謝Sundar,這很好,更簡單的方法。將嘗試一下。 – Grant 2012-08-06 11:50:17

    +0

    很好,謝謝。 – Grant 2012-08-06 12:53:02

    1

    試試這個:

    if(($srchRegion!='00' || $srchRegion!='') && ($srchCategory=='00' || $srchCategory=='')){ 
    return $query .= "AND region='$srchRegion'"; 
    } elseif(($srchRegion=='00' || $srchRegion=='') && ($srchCategory!='00' || $srchCategory!='')){ 
    return $query .= "AND category='$srchCategory'"; 
    } elseif($srchRegion!='00' || $srchRegion!='') && ($srchCategory!='00' || $srchCategory!='')){ 
    return $query .= "AND region='$srchRegion' AND category='$srchCategory'"; 
    } 
    

    您還沒有結構化的,如果條件合適的。你用一個AND條件檢查兩個OR條件,所以你需要把OR條件放在括號內。

    +0

    有時一個人不能看到樹的木材。謝謝,這是100%正確的,現在完美。 – Grant 2012-08-06 10:09:51

    相關問題