0

以下の SQL クエリは、両方に $_POST 値がある場合、 $srchRegion && $srchCategory 文字列を出力しません。なんで?

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'";
}

これを行うより良い方法はありますか?

4

2 に答える 2

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'";
}

if 条件を正しく構成していません。1 つの AND 条件で 2 つの OR 条件をチェックするため、OR 条件を括弧で囲む必要があります。

于 2012-08-06T10:06:08.843 に答える
1

可能なすべてのブール値と乱雑な if-else を探す代わりに、入力された対応する値に基づいて where 句を追加し続ける必要はありません。

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

その$queryため、クエリビルダーとして機能し、設定されている $_POST 値に基づいて where 句を追加し続けます。

于 2012-08-06T10:12:38.733 に答える