2009-02-27 30 views
7

Estoy tratando de pasar una matriz de valores de php a mysql procedimientos almacenados como lista de parámetros y cómo usar la matriz dentro del procedimiento almacenado. La consulta en el procedimiento tiene tres instrucciones IN allí, por lo que me gustaría hacer IN(@listOfids) donde @listOfids es 1,2,3,4 (una matriz implosionada de php).Pasar matriz a un procedimiento almacenado

+0

¿Podría publicar parte de su código editando su respuesta para que podamos entender mejor lo que está tratando de lograr y trabajar desde allí? – lpfavreau

Respuesta

5

Así que tiene una solución que es para concatenar la consulta y los parámetros de modo que el pseudo código es

arrays
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 se implosión que se pasa a través de php por ejemplo ('1,2 , 3,4 '). Espero que esto ayude a alguien

+0

@Akim: si la solución anterior funciona para usted, marque su respuesta como la aceptable para que su pregunta no aparezca más en la lista "sin respuesta". – Guss

+0

Lo intenté pero recibí un mensaje que decía que tenía que esperar 48 horas antes de aceptar mi propia respuesta. – Akeem

+0

Gracias, eso es lo que necesitaba en un apuro. Creo que es posible volcar la lista de identificación en una tabla temporal, pero lo haré cuando tenga más tiempo. – MvcCmsJon

1

Creo que el principal problema aquí es que MySQL no admite matrices como tipo de datos. Debe formar una relación one-to-many con otra tabla que contenga una clave externa de vuelta a sus datos principales y los datos de la matriz.

0

Creo que tiene que pasarlo como un csv. Mysql no es muy amigable con los bucles, por lo que es mejor que lo hagas fuera de todos modos. En cuanto a los lenguajes de procedimientos almacenados, encuentro que Mysql realmente no existe.

Cuestiones relacionadas