Я пытаюсь передать массив значений из php в mysql хранимые процедуры в список параметров и как использовать массив внутри хранимой процедуры. Запрос в процедуре содержит три IN-оператора внутри, поэтому я хотел бы сделать IN(@listOfids)
где @listOfids – 1,2,3,4 (вложенный массив из 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, param2, param3 – это взорванные массивы, которые передаются через php, например ('1,2,3,4'). Надеюсь, это поможет кому-то
Я думаю, основная проблема здесь заключается в том, что MySQL не поддерживает массивы как тип данных. Вам нужно сформировать отношение « один ко многим» к другой таблице, которая содержит внешний ключ, к вашим основным данным и данным массива.
Я думаю, вам нужно передать его как csv. Mysql не очень дружит с циклом, и поэтому вы, вероятно, лучше всего это делаете вне любой стороны. Что касается языков хранимых процедур, я считаю, что Mysql действительно отсутствует.