mysql - 有条件地显示 MySQL 存储过程中查询的一部分

标签 mysql sql stored-procedures conditional-statements

我有一个用 php 构建的 MySQL 查询,但想移至存储过程中。整个查询很适合移入存储过程,但有一个复杂之处:在 php 中,根据条件,我添加“HAVING ......”作为最后一行。是否可以使用条件、案例等以类似的方式构建查询?

例如:

PROCEDURE `GeyMyItems`(
    IN query VARCHAR(100)
    )
  BEGIN
    SELECT * FROM my_table a
    JOIN another_table b ON a.id = b.id
    WHERE my_column = 'this_value'

    IF (query = 'abc')
       HAVING a.my_value = '123';

  END$$

DELIMITER ;

我知道 IF 的语法可能是错误的,但我只是展示我想要做的事情。有更好的方法吗?

我能想到的唯一后退可能是处理 php.ini 中的 HAVING 部分。只是根本不要将其包含在 SQL 中,当我构建对象/数组时,我可以在 while 循环中对其进行过滤。但我想看看如何利用存储过程来完成这样的事情(如果有的话)?

最佳答案

如果您使用 MySQL 5.0 及更高版本,这非常简单。

DELIMITER $$ 

CREATE PROCEDURE `GetMyItems`(
    IN query VARCHAR(100)
    )
  BEGIN
    -- Here you construct your SQL
    SET @s = 'SELECT 1';

    IF query = 'abc' THEN
       SET @s = CONCAT( @s, ',2');
    END IF;

    -- Here you execute it.     
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

  END$$

DELIMITER ;

这是 a similar question here .

关于mysql - 有条件地显示 MySQL 存储过程中查询的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46286410/

相关文章:

sql - PostgreSQL 中的计算/计算/虚拟/派生列

php - sql语法错误

mysql - sql根据其他表选择时间戳之前的最新10个条目

Mysql创建存储过程语法错误

Mysql - 使用列存储计数

php - 一个字段,几个按钮

sql - 使用来自 SQL Server 的输出参数调用 Oracle 存储过程

mysql - 搜索距离邮政编码最近的 5 个位置 - 我应该走哪条路?

php - CodeIgniter - 更改子查询

java - 更新查询执行但不使用 hibernate 更新表