我试图将一组值从php传递给mysql存储过程作为参数列表以及如何在存储过程中使用该数组。程序中的查询中有三个IN语句,所以我想做IN(@listOfids)
其中@listOfids是1,2,3,4(来自php的内爆数组)。
答案 0 :(得分:5)
所以我得到了一个解决方法,即连接查询和参数,以便伪代码
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,param2,param3是通过php传递的内爆数组,例如('1,2,3,4')。希望这有助于某人
答案 1 :(得分:1)
我认为这里的主要问题是MySQL不支持数组作为数据类型。您需要与另一个表形成one-to-many关系,该表包含返回主数据和数组数据的外键。
答案 2 :(得分:0)
我认为你必须把它作为csv传递。 Mysql对循环不是很友好,所以你可能最好在外面做它。至于存储过程语言,我发现Mysql确实缺乏。