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

时间:2017-09-18 19:00:21

标签: mysql sql stored-procedures conditional

我有一个MySQL查询,我在PHP中构建,但想要进入存储过程。整个查询很好进入sproc,除了一个复杂:在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中的HAVING部分。根本不要在SQL中包含它,当我构建我的对象/数组时,我可以在我的while循环中进行过滤。但我想看看我如何利用存储过程来做这样的事情,如果有的话?

2 个答案:

答案 0 :(得分:2)

如果您正在使用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

答案 1 :(得分:0)

到你的where子句添加:

and 
(
(query = 'abc' and a.my_value ='123')
or query <> 'abc'
)