2009-02-27 170 views
7

我想從php傳遞一個數組數組到mysql存儲過程作爲參數列表以及如何使用存儲過程中的數組。該過程中的查詢有三個IN語句,所以我想做IN(@listOfids)其中@listOfids是1,2,3,4(來自php的內部數組)。將數組傳遞到存儲過程

+0

您可以通過編輯您的答案發布部分代碼,以便我們可以更好地理解您嘗試實現的目標並從那裏開展工作? – lpfavreau 2009-02-27 16:14:50

回答

5

所以我就一種變通方法,其是連接查詢和參數,以便僞代碼是通過PHP例如傳入

CREATE PROCEDURE `related_stories`(IN param1 VARCHAR(255), IN param2 VARCHAR(255), IN param3 VARCHAR(255), IN publishDate INT(11), IN tlimit INT(11)) 
BEGIN 

SET @query =CONCAT(' 

select s.* from 
(

select * from 
(
SELECT something where condition IN (',param1,') 
) as table1 

UNION ALL 

select * from 
(
SELECT something where condition IN (',param2,') 
) as table2 

UNION ALL 

select * from 
(
SELECT something where condition IN (',param3,') 
) as table3 

) as s 

WHERE (s.publish_date < ',publishDate,') 
GROUP BY id limit ',tlimit,';'); 

PREPARE stmtInsert FROM @query; 
EXECUTE stmtInsert; 

END 

的param1,參數2,參數3是內爆陣列(「1,2 ,3,4' )。希望這可以幫助別人

+0

@Aemem - 如果上述解決方案適用於您,請將您的答案標記爲可接受的答案,這樣您的問題就不會再出現在「未答覆」列表中。 – Guss 2009-02-28 14:17:52

1

我認爲這裏的主要問題是MySQL不支持將數組作爲數據類型。您需要與包含外鍵的另一個表格形成one-to-many關係返回到主數據和數組的數據。

0

我想你必須把它作爲csv傳入。 Mysql對於循環等並不是很友好,所以你最好在外面做。至於存儲過程語言去我發現Mysql真的缺乏。