[英]Conditionally showing part of a query in MySQL stored procedure
我有一個用php構建的MySQL查詢,但想移入存儲過程。 整個查詢很好地進入了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
循環中進行過濾。 但是,我想看看如何利用存儲過程來處理類似的事情?
如果您使用的是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 ;
這是一個類似的問題 。
在您的where子句中添加以下內容:
and
(
(query = 'abc' and a.my_value ='123')
or query <> 'abc'
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.