0

15 程度のフィールドを含む検索フォームがありますが、たとえば、検索を実行するためにすべてが必要なわけではありません。

ユーザーは、「金融」で働く「ロンドン」の登録済みユーザーを検索するかもしれませんが、$availability や $salary などの他のすべてのフィールドを空白のままにすると、$_POST データは次のようになります。

$location = $_POST['location'];    // Value - London
$sector = $_POST['sector'];        // Value - Finance
$available = $_POST['available'];  // Value - Any
$salary = $_POST['salary'];        // Value - Any

他のフィールドからさらに 12 個ほどの「Any」値がある可能性があることを念頭に置いて、データベース (PHP/MySQL) をクエリして、おそらく数十のクエリをループせずに結果を返す最良の方法は何ですか。

少しわかりやすくするために、次のようなクエリが必要です(意図的な擬似コード):

SELECT * FROM table where location = 'location' AND if($availability !='Any') { available = '$available' } etc etc

このようなことは可能ですか?

または、!='Any' であるすべての $_POST フィールドの単一の文字列を作成し、文字列内のすべての単語を含む行で検索を実行できますか (理論的にはうまくいくと思います)。

これが誰かにとって意味があり、正しい方向に私を向けることができることを願っています.

PSすべての $_POST は、データベースと対話する前にエスケープされ、保護されますが、ここには含まれていません:)

4

3 に答える 3

2

これを試して:

$sql = "SELECT * FROM table where 1 ";
foreach ($_POST as $key => $post) {
    if ($post != 'Any') {
        $sql .= " AND $key = '$post' ";
    }
}

// now you can run $sql against the database
于 2013-03-05T21:15:48.717 に答える
1

引数のために、すべての $_POST を foreach($key=>$val) に収集してから、スイッチまたはステートメントに「AND x=x」を追加する if ステートメントを介してキーを実行できますか?

何かのようなもの:

$sql = "SELECT * FROM table WHERE required='required'";
foreach($_POST as $key=>$val){
if(!empty($val)){ $sql .= " AND ".$key."='".$val"'"; }
}

それが機能するかどうかはわかりませんが、理論的にはそれが最初に考えたことです。

于 2013-03-05T21:16:28.200 に答える
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"; 

SO なしではどこにいるのかわかりません。

于 2013-03-06T12:05:57.243 に答える