2012-10-29 21 views
26

可以說我有,有一個SELECT語句如下一個SP,如何將變量傳遞給IN子句?

SELECT product_id, product_price FROM product 
WHERE product_type IN ('AA','BB','CC'); 

但數據將轉到IN子句必須通過包含值的字符串中的一個變量。下面的東西鏈接

SELECT product_id, product_price FROM product 
WHERE product_type IN (input_variables); 

但它不工作的方式。任何想法如何做到這一點?

+3

'input_variables'從哪裏來?它實際上是一個直接從MYSQL執行的cron作業,所以它的其中一個SP的輸入參數就是'php?' –

+0

。用戶輸入它們取決於他們想要的數據。 – Thanu

+1

所以你的意思是它是一個單一變量逗號分隔值? –

回答

38

傳遞參數值這樣的 - 'AA,BB,CC'。然後,它是足夠用了FIND_IN_SET功能 -

SELECT product_id, product_price 
FROM product 
WHERE FIND_IN_SET(product_type, param); 
+0

它的作品謝謝! – danielad

+0

@danielad歡迎) – Devart

+3

這將導致查詢在沒有索引的所有表上運行。即使認爲這是一個有效的答案也不健壯 –

3

創建一個用戶定義的函數,將逗號分隔值轉換成表格,並通過加入這兩個可以得到所需的結果。

for more

2

通過使用變量是一個問題,一個字符串假設該解決方案

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `spTestListValues`(_list varchar(200)) 
BEGIN 
     SET @LIST=_list; -- assume this a paramter from the stored procedure 
    SELECT NULL AS Id, '' AS Description --insert null value to be used for list box population 
    UNION 
    (SELECT id, Description 
    FROM test_table 
    WHERE FIND_IN_SET(id,@LIST) ORDER BY Description ASC) ; 

END 

調用其他查詢窗口的程序

call `spTestListValues`('4,5,3'); --no paramter currently for test 

輸出

ID Description 
NUll 
1 TEST1 
4 TEST2 
5 TEST3