我有一些搜索功能,允许用户从下拉列表中选择一个名称,或者在搜索字段中键入人名或部分名称(通配符功能)。
我遇到的问题是如果使用下拉选项,那么搜索字段将不会,反之亦然。
我尝试了一些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来确保下拉列表和通配符搜索相互隔离吗?
感谢您的时间和帮助。
答案 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' <>'')"