SQL语句,其中值可能为空(空)

时间:2012-08-22 14:14:51

标签: php sql

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

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

我尝试了一些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要求两个语句都为真,并且因为$id在指定通配符条目时没有(空),条件永远不会为真。

任何人都可以帮助我使用一些sql来确保下拉列表和通配符搜索相互隔离吗?

感谢您的时间和帮助。

3 个答案:

答案 0 :(得分: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_ 

答案 1 :(得分:0)

有条件地要求id

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

$query = "SELECT id, name, age FROM player WHERE {$idCondition}player.name LIKE '%$text%'";

答案 2 :(得分:0)

"SELECT id, name, age FROM player
WHERE (player.id = '$id' AND '$id' <> '')
    OR (player.name LIKE '%$text%' AND '$text' <>'')"