-1

次の問題があります: ユーザーがフィルターを DB 検索に適用できるようにしたいです。A、B、C の 3 つのフィルターがあります。ユーザーはそれらを気にせず、「Any」を選択するように、それらはすべて「空」にすることができます。ここで、このクエリを DB レコードに対してチェックしたいと思います。次のように通常のmysqlクエリを使用します

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

これは、ユーザーが A、B、C (!= "any") に固有のものを入力する限り、正常に機能します。「任意」を選択すると、「行 1 = 「任意/すべて」などのテーブルから * を選択します。」私は正しい構文を理解できないようです(可能であれば)、厄介な大文字と小文字の区別を避けたいと思います(A == any の場合は選択を実行し、B == empty の場合など)。

どんな助けでも大歓迎です。

4

4 に答える 4

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

これにより、条件と拡張の任意の組み合わせが可能になります。

于 2013-03-04T22:29:59.063 に答える
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;
}
于 2013-03-04T22:16:09.317 に答える
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";
于 2013-03-04T22:12:56.777 に答える