如何编写SQL实现基于单字段判断的分支条件查询需求
MySQL条件分支查询实现方案
结论
你需要的逻辑完全可以在MySQL中实现,你之前的写法错误是因为SQL中没有IF() { ... }这种类代码块的语法,正确写法如下。
正确写法(优先推荐,性能更优)
用逻辑运算符AND/OR组合实现分支判断,这种写法可以命中索引,执行效率更高:
SELECT field1, field2 FROM `table` WHERE id = 1 AND intLv < fieldLv -- 核心分支判断逻辑 AND ( limitedLogin <= 0 OR ( limitedLogin > 0 AND lastLogin < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 HOUR) AND logins < totLogins ) ) ORDER BY id DESC LIMIT 1;
逻辑说明:
- 当
limitedLogin <= 0时,括号内左侧条件成立,直接跳过后续校验,符合返回要求 - 当
limitedLogin > 0时,必须同时满足「lastLogin距当前已超过1小时」、「logins小于totLogins」两个条件,才会返回对应记录
可选写法(IF函数实现)
如果你更习惯类if的写法,可以用MySQL原生的IF()函数,语法为IF(判断条件, 条件成立时的返回值, 条件不成立时的返回值):
SELECT field1, field2 FROM `table` WHERE id = 1 AND intLv < fieldLv AND IF( limitedLogin > 0, (lastLogin < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 1 HOUR) AND logins < totLogins), TRUE ) ORDER BY id DESC LIMIT 1;
注意事项:
- 如果你需要的时间间隔不是固定1小时,可以把语句中的
1替换成你实际的时间参数即可 table是MySQL关键字,作为表名使用时建议加反引号`包裹避免语法错误
内容的提问来源于stack exchange,提问作者Fede Kindred
相关产品推荐
相关产品推荐

