2015-07-11 51 views
0

我有一個存儲過程,它有一個參數IN id_list VARCHAR(65535)(由於不可能將數組作爲參數傳遞)。 id_list是一個分解(glue is comma symbol)整數數組。我用這樣的:從逗號分隔的列表中選擇到溫度表中

CREATE PROCEDURE `some_procedure`(IN `id_list` VARCHAR(65535)) 
BEGIN 
SET @`query`:= CONCAT(
    'SELECT 
     * 
    FROM 
     `table` AS `tbl` 
    WHERE 
     `tbl`.`id` IN (',`id_list`,')'); 
    PREPARE `statement` FROM @`query`; 
    EXECUTE `statement`; 
END$$ 

但我怎麼能選擇id_list值到一個臨時表,在未來的其他一些表加入了嗎?

回答

-1

您可以使用MySQL函數FIND_IN_SET

CREATE PROCEDURE `some_procedure` (IN `id_list` VARCHAR(65535)) 
BEGIN 
    SELECT id 
    FROM table 
    WHERE FIND_IN_SET(id, id_list); 
END 

但是請注意長表的索引,因爲FIND_IN_SET忽略表的索引。

希望它有幫助。

相關問題