基于各种可选的用户输入,我需要修改查询中where子句的结构(不仅仅是动态值,而是动态结构)。
示例.. 如果他们选择客户 ID,则不要使用 branchID 过滤器,但如果他们选择 empID,则同时使用 empID 和 branchID 过滤器。还有更多使用的标准,这只是一个例子。
我可以使用 CASE 语句将所有逻辑构建到 where 子句中,但我猜这不会得到很好的优化?我知道我可以在存储过程中动态构建 sql 语句,我也可以使用准备好的语句......但这看起来很草率?还有其他我没有想到的方法吗?
最佳答案
通常的方法是在处理用户输入的层中动态构建查询。如果您不在数据库前使用高级语言,这实际上意味着求助于存储过程,这看起来确实有点脏 - 我也觉得这种语言很尴尬。
纯 SQL 解决方案没有太多开销,因为基于常量的条件将被非常有效地优化掉(查询开始时用户输入是常量)。
关于mysql - 如何处理mysql中的复杂条件where子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29088798/