首页 > 解决方案 > 如何在 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 案例,这只会使事情复杂化。

标签: mysql

解决方案


我认为这些查询中的任何一个都会得到你想要的结果:

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

推荐阅读