0

そのタイトルがあいまいな場合は申し訳ありません。私がやろうとしていることを何と呼ぶべきかさえ考えられません...与えられたコメントを更新します。

最初の(コードと呼ばれる)セットには5つのオプションがあり、2番目のセットには20のオプション(ファミリーと呼ばれます)があります。現在、クエリの WHERE ステートメントを作成するために、次のようにしています。

if(isset($_POST['code']) && !empty($_POST['code'])){ 
foreach($_POST['code'] as $key=>$value){ 
    if($value==1) $criteria[] = "code='".mysql_escape_string($key)."'"; 
} 
 $criteria = implode(' OR ', $criteria);
}

if(isset($_POST['family']) && !empty($_POST['family'])){ 
foreach($_POST['family'] as $key=>$value){ 
    if($value==1) $family_criteria[] = "family='".mysql_escape_string($key)."'";

} 
$family_criteria = implode(' OR ', $family_criteria);

}

ここにクエリの一部があります

WHERE $criteria AND $family_criteria ORDER BY ....

これにより、「WHERE code=1 OR code=2 AND family=jones ORDER BY...」という結果になります。

私がする必要があるのは、「WHERE code=1 and family=jones OR code=2 and family=jones ORDER BY ...」です。

4

1 に答える 1

1

以下を構築するのはどうですか:

... WHERE (code=1 or code=2) and family='jones' ...

これは、パラメーター生成の周りに括弧を追加するために にわずかな調整を加えるだけで済み、code意味的にはあなたが望むものと同じです。

if(isset($_POST['code']) && !empty($_POST['code'])){ 
    foreach($_POST['code'] as $key=>$value){ 
        if($value==1) $criteria[] = "code='".mysql_escape_string($key)."'"; 
    } 
    $criteria = "(" . implode(' OR ', $criteria) . ")";
}
于 2013-07-12T14:36:17.820 に答える