Передать массив в хранимую процедуру - PullRequest
7 голосов
/ 27 февраля 2009

Я пытаюсь передать массив значений из php в хранимые процедуры mysql в виде списка параметров и как использовать массив внутри хранимой процедуры. Запрос в процедуре содержит три оператора IN, поэтому я хотел бы сделать IN(@listOfids), где @listOfids равен 1,2,3,4 (развернутый массив из php).

Ответы [ 3 ]

5 голосов
/ 27 февраля 2009

Итак, я нашел обходной путь, который заключается в объединении запроса и параметров, чтобы псевдокод был

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 голос
/ 27 февраля 2009

Я думаю, что главная проблема в том, что MySQL не поддерживает массивы как тип данных. Вам необходимо сформировать отношение один-ко-многим с другой таблицей, которая содержит внешний ключ для ваших основных данных и данных массива.

0 голосов
/ 27 февраля 2009

Я думаю, что вы должны передать это как CSV. Mysql не очень дружит с зацикливанием и тому подобным, так что вам, вероятно, лучше всего делать это снаружи. Что касается языков хранимых процедур, я обнаружил, что Mysql действительно не хватает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...