我正在我的“search.php”中为一个数据库构建一个搜索功能,我在其中存储有关ip-address和各种单元的信息。每个单元在数据库中都有一个“类别”列。我的搜索选择是在文本字段中搜索,和/或在下拉列表中选择类别。当我在下拉列表中选择一个类别而不在文本字段中输入任何内容时,我得到了正确的结果(返回包含所选类别的所有行)。
但是当我在文本字段中输入任何内容时,我都没有得到任何结果。
当我只选择类别时查询(在这种情况下,“IP-adress”被选为类别):
SELECT dataid,
firstname,
lastname,
data.name dataname,
description,
ip,
TYPE,
TIMESTAMP
FROM DATA
INNER JOIN USER ON DATA.userid=USER.userid
WHERE TYPE='IP-adress'
AND DATA.name LIKE '%%'
AND description LIKE '%%'
AND ip LIKE '%%'
AND TYPE LIKE '%%'
AND firstname LIKE '%%'
AND lastname LIKE '%%'
ORDER BY TIMESTAMP DESC
这将返回包含所选类别的所有行,如我所愿。
在文本字段中输入内容时查询:
SELECT dataid,
firstname,
lastname,
data.name dataname,
description,
ip,
TYPE,
TIMESTAMP
FROM DATA
INNER JOIN USER ON DATA.userid=USER.userid
WHERE TYPE='IP-adress'
AND DATA.name LIKE '%test%'
AND description LIKE '%test%'
AND ip LIKE '%test%'
AND TYPE LIKE '%test%'
AND firstname LIKE '%test%'
AND lastname LIKE '%test%'
ORDER BY TIMESTAMP DESC
我有组合,其中包含单词“test”的列作为我的输入,但我没有得到任何结果。
我现在已经有一段时间了,而且我很确定我之前遇到了相反的问题,当我选择一个类别时,我没有得到任何结果。
无论如何,我希望另一双眼睛可以帮助我。如果您需要更多代码,请直接询问!
答案 0 :(得分:1)
这是因为您已将AND用于所有条件。它将在所有恶魔中搜索测试,如果一个字段没有测试,则条件失败。 试试这种方式
SELECT dataid,
firstname,
lastname,
data.name dataname,
description,
ip,
TYPE,
TIMESTAMP
FROM DATA
INNER JOIN USER ON DATA.userid=USER.userid
WHERE TYPE='IP-adress'
AND (DATA.name LIKE '%test%'
OR description LIKE '%test%'
OR ip LIKE '%test%'
OR TYPE LIKE '%test%'
OR firstname LIKE '%test%'
OR lastname LIKE '%test%')
ORDER BY TIMESTAMP DESC
答案 1 :(得分:0)
如果我正在查看第二个查询:
WHERE type='IP-adress'
以及后来:
AND type LIKE '%test%'
这不会给任何结果,因为'IP-adress'中不包含'test'...
此外,第二个查询实际上意味着where
中给出的所有字段至少应包含文本'test'。你确定这是正确的吗?