【问题标题】:PhP MySQL NOT LIKE does not return the correct valuePhP MySQL NOT LIKE 不返回正确的值
【发布时间】:2016-01-02 05:54:14
【问题描述】:

我正在尝试在 PHP 和 MySQL 中使用 LIKENOT LIKE 查询结果。

我有一个表 BeaconEvent 有 2 列:BeaconIDEventID

BeaconEvent

BeaconID        EventID
-------------------------
5DBA-BC5B       Time0003
5DBA-BC5B       NLB0001
5264-9028       NLB0004
1F8B-35E6       NLB0005

当我运行 MySQL 命令以选择所有 BeaconIDEventID 是一个特定值时,查询工作正常但是当我运行查询以选择 BeaconIDEventID 时不等于指定值,它返回所有BeaconID(这是不对的,应该排除EventID等于特定值的BeaconID

有效的示例查询:

SELECT BeaconEvent.BeaconID 
FROM BeaconEvent 
WHERE BeaconEvent.EventID = "Time0003"

SELECT BeaconEvent.BeaconID 
FROM BeaconEvent 
WHERE BeaconEvent.EventID LIKE "Time0003"

这些查询不起作用:

SELECT BeaconEvent.BeaconID 
FROM BeaconEvent 
WHERE BeaconEvent.EventID != "Time0003"

SELECT BeaconEvent.BeaconID 
FROM BeaconEvent 
WHERE BeaconEvent.EventID <> "Time0003"

SELECT BeaconEvent.BeaconID 
FROM BeaconEvent 
WHERE BeaconEvent.EventID NOT LIKE "Time0003"

SELECT BeaconEvent.BeaconID 
FROM BeaconEvent 
WHERE BeaconEvent.EventID NOT LIKE "%Time0003%"

有什么建议可以比较不等于特定值的值吗?提前致谢

【问题讨论】:

  • 5DBA-BC5B 重复。

标签: php mysql sql compare sql-like


【解决方案1】:

对于两个值,您的数据具有相同的 BeaconID

BeaconID        EventID
5DBA-BC5B       Time0003       
5DBA-BC5B       NLB0001   

您的查询可以正常工作:

SELECT BeaconEvent.BeaconID 
FROM BeaconEvent 
WHERE BeaconEvent.EventID <> "Time0003";

SELECT BeaconEvent.BeaconID 
FROM BeaconEvent 
WHERE BeaconEvent.EventID = "Time0003";

SqlFiddleDemo

输出:

╔═══════════╗
║ BeaconID  ║
╠═══════════╣
║ 5DBA-BC5B ║
║ 5264-9028 ║
║ 1F8B-35E6 ║
╚═══════════╝

╔═══════════╗
║ BeaconID  ║
╠═══════════╣
║ 5DBA-BC5B ║
╚═══════════╝

如果你想排除它(并且你确定你的数据是正确的)你可以使用:

SELECT BeaconEvent.BeaconID 
FROM BeaconEvent 
WHERE BeaconEvent.BeaconID <> (SELECT BeaconID 
                               FROM BeaconEvent
                               WHERE EventID = 'Time0003')

SqlFiddleDemo2

输出:

╔═══════════╗
║ BeaconID  ║
╠═══════════╣
║ 5264-9028 ║
║ 1F8B-35E6 ║
╚═══════════╝

【讨论】:

  • 非常感谢您的回复,我会试试的。但是我现在有一个中间问题要加入 3 个表。另一个带有事件 ID 的表是主键,包含所有事件详细信息。这是我的查询,不知道发生了什么:SELECT Event.EventID,Event.EventTitle,Event.EventDesc,Event.EventStartTime,Event.EventEndTime FROM Event JOIN BeaconEvent JOIN Beacon AS BeaconEvent.BeaconID=Beacon.BeaconID && Event。 EventID = BeaconEvent.EventID WHERE Event.EventEndTime>=NOW()
  • @LêKhánhVinh 所以这是XY question。真正的问题不是关于 的错误行为,不是 LIKE,而是您的具体查询。我建议使用完整的数据样本、sqlfiddle.com 演示和所需的输出提出新问题。
猜你喜欢
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
相关资源
最近更新 更多