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