2010-12-14 52 views
0

Je deviens fou en essayant d'utiliser un "tableau" de valeurs obtenues à partir d'un GROUP_CONCAT dans une instruction WHERE IN, quand GROUP_CONCAT ne prend qu'un "id" cela fonctionne bien mais quand il prend plus, il ne le fait pas.MySQL: Utilisation de la variable sur une clause WHERE IN

Comme suit:

START TRANSACTION; 
DECLARE @coupon_ids VARCHAR(MAX); 
-- Take one or more ids 
SET @coupon_ids:=(SELECT IFNULL((SELECT GROUP_CONCAT(coupon_id) FROM some_table WHERE order_id=(SELECT entity_id FROM sales_order WHERE increment_id=310033638) GROUP BY order_id), (SELECT coupon_id FROM some_table WHERE coupon_id=310033638))); 
SELECT @coupon_ids; 
INSERT INTO some_table_gift VALUES (NULL,TRIM('whatever'),'',''); 
SET @lastid:=LAST_INSERT_ID(); 
-- Here if @coupon_ids is just one id, like 123 it works, if it is a list of them like 123,234,254 it doesn't works 
UPDATE some_table SET [email protected],is_gift=1 WHERE coupon_id IN (@coupon_ids); 
COMMIT; 
-- Same here 
SELECT coupon_id,owner_id,is_gift FROM some_table WHERE coupon_id IN (@coupon_ids); 

Est-ce que quelqu'un sait comment travailler avec cela?

Merci!

Répondre

0

Quel est le type que vous avez classé pour coupon_id, s'il ne s'agit pas d'un type de numéro qui ne fonctionnera pas.

Une façon vous pouvez ajouter guillemet (guillemet simple) pour chaque résultat en GROUP_CONCAT Ecrire

GROUP_CONCAT(coupon_id SEPARATOR '","') 

enlever SELECT @coupon_ids

Et

dans QUERY essayer ce WHERE coupon_id IN ("@coupon_ids")

+0

GROUP_CONCAT est avec cette SEPARATOR par défaut. SELECT @coupon_ids est là juste pour obtenir des rapports. J'ai essayé '@coupon_ids' et fait un remplacement de, avec ',' plus '@coupon_ids' et cela ne fonctionne pas :( –

+0

J'édite 'SEPARATOR' "," ''Et dans la clause Where dont vous avez besoin en quelque sorte, ajoutez des guillemets autour de @coupon_ids, Par votre langage de programmation, que vous ficelez dans IN Clause IN ("123", "234", "254") – Naresh

+0

Une autre fonction utile est 'FIND_IN_SET' Essayez ceci – Naresh