【问题标题】:MySQL SELECT "LIKE" parameter not working properlyMySQL SELECT“LIKE”参数无法正常工作
【发布时间】:2013-11-08 12:26:18
【问题描述】:

我正在我的“search.php”中为一个数据库构建一个搜索功能,我在其中存储有关 ip 地址和各种单位的信息。每个单元在数据库中都有一个“类别”列。我的搜索选择是在文本字段中搜索,和/或在下拉列表中选择一个类别。当我在下拉列表中选择一个类别而不在文本字段中输入任何内容时,我会得到正确的结果(返回包含所选类别的所有行)。

但是当我在文本字段中输入任何内容时,我没有得到任何结果。

当我只选择类别时查询(在这种情况下“IP地址”被选为类别):

  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”的列作为我的输入,但我没有得到任何结果。

我已经有一段时间了,我很确定我以前遇到过相反的问题,当我选择一个类别时我没有得到任何结果。

无论如何,我希望另一双眼睛可以帮助我。如果您需要更多代码,请索取!

【问题讨论】:

  • 您能否提供一个您希望返回的数据的示例记录?
  • 您确定只想要所有列包含test ...的记录吗?

标签: mysql select sql-like


【解决方案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

【讨论】:

  • 这成功了!起初我只是将较低的“AND's”更改为“OR”,这导致了多个结果,但我没有注意到WHERE TYPE='IP-adress' AND 和“)”之后的“(”。非常感谢您的快速回复!
【解决方案2】:

如果我正在查看第二个查询:

WHERE type='IP-adress' 

及以后:

AND type LIKE '%test%' 

这不会返回任何结果,因为“IP 地址”中不包含“测试”...

另外,第二个查询实际上意味着where 中给出的所有字段至少应包含文本“test”。你确定这是正确的吗?

【讨论】:

    猜你喜欢
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2013-11-30
    相关资源
    最近更新 更多