簡體   English   中英

有條件地在MySQL存儲過程中顯示查詢的一部分

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM