我有一个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
循环中进行过滤。但我想看看我如何利用存储过程来做这样的事情,如果有的话?
答案 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 ;
答案 1 :(得分:0)
到你的where子句添加:
and
(
(query = 'abc' and a.my_value ='123')
or query <> 'abc'
)