2009-02-27 169 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真的缺乏。