2009-02-27 8 views
7

J'essaie de passer un tableau de valeurs de php à des procédures stockées mysql comme liste de paramètres et comment utiliser le tableau dans la procédure stockée. La requête dans la procédure a trois instructions IN dedans là donc je voudrais faire IN(@listOfids) où @ listOfids est 1,2,3,4 (un tableau implosé de php).Passer un tableau dans une procédure stockée

+0

Pourriez-vous poster une partie de votre code en modifiant votre réponse afin que nous puissions mieux comprendre ce que vous essayez d'accomplir et de travailler à partir de là? – lpfavreau

Répondre

5

alors je suis une solution de contournement qui consiste à concaténer la demande de recherche et les paramètres de sorte que le pseudo-code est

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 sont des tableaux implosé qui est transmise par l'intermédiaire de php par exemple ('1,2 3,4 '). J'espère que cela aidera quelqu'un

+0

@Akeem - Si la solution ci-dessus fonctionne pour vous, marquez votre réponse comme réponse acceptable afin que votre question n'apparaisse plus dans la liste "sans réponse". – Guss

+0

J'ai essayé mais j'ai reçu un message disant que je devais attendre 48 heures avant d'accepter ma propre réponse. – Akeem

+0

Merci, c'est ce dont j'avais besoin à la rigueur. Je pense qu'il est possible de vider la liste d'id dans une table temporaire, mais je le ferai quand j'aurai plus de temps. – MvcCmsJon

1

Je pense que le problème principal est que MySQL ne prend pas en charge les tableaux en tant que type de données. Vous devez former une relation one-to-many à une autre table qui contient une clé étrangère à vos données principales et les données du tableau.

0

Je pense que vous devez le transmettre en tant que csv. Mysql n'est pas très sympa avec le looping et c'est donc probablement mieux de le faire dehors de toute façon. En ce qui concerne les langages de procédure stockés, je trouve que Mysql manque vraiment.

Questions connexes