【发布时间】:2012-08-22 14:14:50
【问题描述】:
我有一些搜索功能,它允许用户从下拉列表中选择一个名字,或者在搜索字段中输入一个人名或其中的一部分(通配符功能)。
我遇到的问题是,如果使用下拉选项,则搜索字段将不会出现,反之亦然。
我尝试了一些 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 来确保下拉列表和通配符搜索彼此隔离?
提前感谢您的时间和帮助。
【问题讨论】:
-
如果您通过 PHP 生成 SQL,为什么不添加一个 if 语句来检查并查看选择了哪些参数,然后将适当的文本添加到 WHERE 子句?
-
我认为
$id如果下拉,则通过$text如果文本输入? -
以防万一您使用
mysql_*函数(根据您的代码,它看起来像您):它可能无助于回答您的问题,但您应该停止使用mysql_*函数。它们正在被弃用。请改用PDO(PHP 5.1 起支持)或mysqli(PHP 4.1 起支持)。如果您不确定使用哪一个,read this article。 -
@matt 不,我正在使用 PDO,所以不用担心
-
然后使用代码 $text="%".$text."%"; SELECT id, name, age FROM player WHERE player.id = '$id' OR player.name LIKE '%$text%'