【问题标题】:MYSQLi SELECT statement malformed or misorderedMYSQLi SELECT 语句格式错误或顺序错误
【发布时间】:2014-12-18 19:50:10
【问题描述】:

使用下表“技术说明”:

并且,使用以下 SQLi 查询:

SELECT *  
FROM 
  `technotes` 
WHERE 
  `techgroup` LIKE '%dispatch%' OR 
  `techgroup` LIKE '%30243542%' AND 
  `expires` >= '2014-12-18' AND 
  `viewed` NOT LIKE '%30243542%'

预期会返回 alertid 的:23324325 和 23546576(第一个和最后一个)。但相反,我得到了记录 1,3,4,5 被退回。我在操作顺序上遗漏了一些东西,或者 SQLi 选择语句中的某些其他组件格式错误,但不确定是什么。有人可以建议我遗漏或需要更改的内容以使其正常工作吗?

【问题讨论】:

  • “过期”是日期时间字段吗?
  • 作为第一步,我会在条件句周围添加括号以确保优先级正确。我不确定 MySQL 是否给予 OR 或 AND 更高的优先级。
  • “过期”字段类型设置为“日期”
  • 将前 2 个 OR 条件括在括号中
  • 你使用orand 没有任何() 来指定你想要的解析顺序:dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

标签: php select mysqli


【解决方案1】:

试试这个:

SELECT *  FROM 
  `technotes` 
WHERE 
(`techgroup` LIKE '%dispatch%' OR `techgroup` LIKE '%30243542%') 
AND `expires` >= '2014-12-18' 
AND (`viewed` NOT LIKE '%30243542%' OR ISNULL(`viewed`) )

【讨论】:

    猜你喜欢
    • 2016-08-25
    • 2013-05-17
    • 2016-12-18
    • 2013-04-30
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    相关资源
    最近更新 更多