0

我有一些搜索功能,允许用户从下拉列表中选择一个名称,或者在搜索字段中输入一个人名或其中的一部分(通配符功能)。

我遇到的问题是,如果使用下拉选项,则搜索字段将不会出现,反之亦然。

我尝试了如下一些 SQL(请注意变量代表通过表单发送的数据):

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

使用上述内容时,通配符功能可以正常工作。

但是,如果您从下拉列表中选择一个玩家,则它会返回所有玩家。这是因为 for 的值$text是空的(空)并且 LIKE '%%' 表示选择所有内容,因此它会选择所有名称。

然后我尝试了以下方法:

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

现在下拉功能按预期工作,但通配符搜索不起作用。这是因为我假设 AND 要求两个语句都为真,并且因为$id当只指定通配符条目时什么都没有(空),条件永远不会为真。

任何人都可以帮助我使用一些 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 回答