0

ユーザーがドロップダウンリストから名前を選択するか、人の名前またはその一部 (ワイルドカード機能) を検索フィールドに入力できるようにする検索機能があります。

私が抱えている問題は、ドロップ ダウン オプションを使用すると検索フィールドが使用されず、その逆も同様であるということです。

次のようにいくつかのSQLを試しました(変数はフォーム経由で送信されたデータを表すことに注意してください):

SELECT id, name, age FROM player
    WHERE player.id = '$id'
        OR player.name LIKE '%$text%'

上記を使用すると、ワイルドカード機能が正常に機能します。

ただし、ドロップダウンからプレーヤーを選択すると、すべてのプレーヤーが返されます。これは、の値$textが何もない (空) ためであり、LIKE '%%' はすべてを選択することを意味し、すべての名前を選択するためです。

次に、次のことを試しました。

SELECT id, name, age FROM player
    WHERE player.id = '$id'
        AND player.name LIKE '%$text%'

ドロップダウン機能は期待どおりに機能するようになりましたが、ワイルド カード検索は機能しません。これは、AND では両方のステートメントが true である必要があり$id、ワイルドカード エントリのみが指定されている場合は何も (空) であるため、条件が true になることはないと想定しているためです。

ドロップダウンとワイルドカード検索の両方が互いに分離して機能することを確認するために、SQLを手伝ってくれる人はいますか?

お時間をいただきありがとうございます。

4

3 に答える 3

1
$params = ''

if($id !== ''){
  $params = "player.id = '$id'";
} else if($text !== ''){
  $params = "player.name LIKE '%$text%'";
}

$sql = "SELECT id,name,age FROM player WHERE {$params}";

mysql_query($sql);  //if using mysql_ 
于 2012-08-22T14:22:27.430 に答える
0

条件付きで要求id:

$idCondition = "";
if ($id) {
    $idCondition = "player.id = '$id' AND ";
}

$query = "SELECT id, name, age FROM player WHERE {$idCondition}player.name LIKE '%$text%'";
于 2012-08-22T14:18:13.957 に答える
0
"SELECT id, name, age FROM player
WHERE (player.id = '$id' AND '$id' <> '')
    OR (player.name LIKE '%$text%' AND '$text' <>'')"
于 2012-08-22T14:24:09.243 に答える