如何通过SQL直接判断数据库表最后4行的value字段是否均为指定值
实现方案
方案1:直接返回布尔判断结果
直接通过SQL计算最终结果,返回值1表示最后4行的value均为a,0表示不满足条件,无需PHP层循环统计:
SELECT COUNT(*) = 0 AS all_match FROM ( -- 先取最后4行数据 SELECT value FROM testing ORDER BY id DESC LIMIT 4 ) last_four_rows -- 过滤出值不等于a的行 WHERE value <> 'a';
逻辑说明:如果最后4行都是a,那么过滤后行数为0,COUNT(*) =0的判断结果就是1,否则为0。你可以直接在PHP中读取这个返回值做判断即可。
方案2:满足条件时返回最后4行数据
如果需要在符合条件的前提下拿到这4行的完整数据,不符合时返回空结果,可以用如下写法:
SELECT * FROM testing WHERE EXISTS ( SELECT 1 FROM ( SELECT value FROM testing ORDER BY id DESC LIMIT 4 ) last_four HAVING COUNT(CASE WHEN value <> 'a' THEN 1 END) = 0 ) ORDER BY id DESC LIMIT 4;
补充说明
如果你的业务要求必须表中总行数≥4才做判断,可以在判断逻辑中加一行总行数校验,比如方案1的SQL可以调整为:
SELECT (COUNT(*) = 0 AND (SELECT COUNT(*) FROM testing) >=4) AS all_match FROM ( SELECT value FROM testing ORDER BY id DESC LIMIT 4 ) last_four_rows WHERE value <> 'a';
内容的提问来源于stack exchange,提问作者mm1234
相关产品推荐
相关产品推荐

