2014-05-17 8 views
0

J'ai une requête commeprocédure stockée avec une instruction IN (mysql)

Select id,name,... FROM table WHERE id IN (?) 

La requête est en fait plus complexe avec des jointures et une autre (?) Avec les mêmes ids. On m'a dit de le mettre sur une procédure stockée pour le rendre plus facile à gérer et plus sûr, mais mysql ne supporte pas les tableaux, donc je ne suis pas sûr de la meilleure façon de le faire, étant donné que je ne sais pas Je sais combien d'id je vais devoir passer. J'ai vu des gens passer une chaîne. Est-ce le seul moyen?

+0

Vous pouvez utiliser des tables temporaires. question similaire est [tableau passe à la routine MySQL stockées] [1] [1]: http://stackoverflow.com/questions/8149545/pass-array-to-mysql-stored-routine –

Répondre

0

Vous pouvez utiliser des tables temporaires. Bien que cette réponse ne soit pas hautement votée, je suppose que l'utilisation d'un paramètre string est la méthode préférée (17 votes contre 2 votes) (voir le lien). La réponse avec la table temporaire provient d'une autre question: Pass array to MySQL stored routine

Utilisez une jointure avec une table temporaire. Vous n'avez pas besoin de passer temporairement les tables aux fonctions, elles sont globales.

create temporary table ids(id int) ; 
insert into ids values (1),(2),(3) ; 

delimiter // 
drop procedure if exists tsel // 
create procedure tsel() -- uses temporary table named ids. no params 
READS SQL DATA 
BEGIN 
    -- use the temporary table `ids` in the SELECT statement or 
    -- whatever query you have 
    select * from Users INNER JOIN ids on userId=ids.id ; 
END // 
DELIMITER ; 

CALL tsel() ; -- call the procedure 
Questions connexes