mysql - 如何在 WHERE 子句中使用 GREATER THAN / LESS THEN 作为动态参数?
问题描述
我将“more”和“less”之类的值作为 IN“_more_less”参数以及“_records_num”从 PHP 传递到 mySQL 过程,我想知道这在 mySQL 过程查询中是否可能:
SELECT * FROM table
CASE
WHEN _more_less = 'more'
THEN HAVING (COUNT(*) >= _records_num OR _records_num IS NULL)
ELSE HAVING (COUNT(*) <= _records_num OR _records_num IS NULL)
END
或某种将“更多”或“更少”作为值传递给“_more_less”参数并使其在与上述逻辑匹配的查询本身中评估为 >= 或 <= 的方式。
在没有为这些场景中的每一个场景编写 IF ... THEN ... END IF 语句的情况下,mySQL 是否有可能,因为我已经有一些 IF / THEN 案例,这只会使事情复杂化。
解决方案
我认为这些查询中的任何一个都会得到你想要的结果:
SELECT col1, COUNT(*) cnt FROM table
GROUP BY col1
HAVING
(_more_less = 'more' AND (COUNT(*) >= _records_num OR _records_num IS NULL)) OR
(_more_less = 'less' AND (COUNT(*) <= _records_num OR _records_num IS NULL))
----------------
SELECT col1 FROM
(SELECT col1, COUNT(*) cnt,
CASE _more_less WHEN 'more' THEN COUNT(*) >= _records_num
ELSE COUNT(*) <= _records_num END RES --less
FROM table GROUP BY col1) X
WHERE RES = 1 OR _records_num IS NULL
推荐阅读
- c# - 按钮“后退”始终禁用
- php - 问题解决 在 PHP 7.2 上移动上传的文件错误 8 - UPLOAD_ERR_EXTENSION
- javascript - 可观察管道中的异常被抑制
- asp.net-core - 扩展 ResourceManagerStringLocalizer 功能
- php - 元查询 - 在一个查询中比较两个元值
- angular - 如果一次失败,为什么角度 ngx 效果不起作用?
- python - 从以特定字符开头的目录中获取文件
- react-native - 在 react native 中使用 Branch.io 进行分析
- regex - notepad++ 中的正则表达式(搜索和替换)
- php - 控制器中用于存储数据的数据库代码