mysql - 如何处理mysql中的复杂条件where子句

标签 mysql stored-procedures prepared-statement

基于各种可选的用户输入,我需要修改查询中where子句的结构(不仅仅是动态值,而是动态结构)。
示例.. 如果他们选择客户 ID,则不要使用 branchID 过滤器,但如果他们选择 empID,则同时使用 empID 和 branchID 过滤器。还有更多使用的标准,这只是一个例子。

可以使用 CASE 语句将所有逻辑构建到 where 子句中,但我猜这不会得到很好的优化?我知道我可以在存储过程中动态构建 sql 语句,我也可以使用准备好的语句......但这看起来很草率?还有其他我没有想到的方法吗?

最佳答案

通常的方法是在处理用户输入的层中动态构建查询。如果您不在数据库前使用高级语言,这实际上意味着求助于存储过程,这看起来确实有点脏 - 我也觉得这种语言很尴尬。

纯 SQL 解决方案没有太多开销,因为基于常量的条件将被非常有效地优化掉(查询开始时用户输入是常量)。

关于mysql - 如何处理mysql中的复杂条件where子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29088798/

相关文章:

mysql - 在没有反引号的 MySQL 中使用 LIKE

Php & Mysql,如何从表患者和医疗记录中获取医疗记录的详细信息?

javascript - 将动态 HTML 表值发布到 jQuery AJAX

mysql - 如何删除表上的存储过程?

java - 准备好的语句 SQL 错误

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

php - 在 yii2 中使用限制范围?

php - 按欧洲日期订购

sql - 根据他们在 SQL Server 中的成就显示名称

mysql - 在存储过程中显示具有不同列的 2 个不同的选择查询