2010-12-14 97 views
0

GROUP_CONCATから取得した値の配列をWHERE IN文に使用しようと怒っています。それ以上はかかりません。MySQL:WHERE IN句で変数を使用する

それは次のように:

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); 

誰もがこれで作業する方法を知っていますか?

ありがとうございます!

答えて

0

あなたが提出したクーポンの種類は、それがうまくいかない数字の種類でない場合はどうですか? GROUP_CONCAT書き込み中

あなたが引用符を追加することができます一つの方法(単一引用符)それぞれの結果については

GROUP_CONCAT(coupon_id SEPARATOR '","') 

このWHERE coupon_id IN ("@coupon_ids")

+0

GROUP_CONCATを試してみてくださいQUERYでSELECT @coupon_ids

そして

を取り除くことですデフォルトではセパレータ。 @coupon_idsを選択するだけでレポートを取得できます。 私は '@coupon_ids'と '、'と '@coupon_ids'の置き換えを試してみましたが動作しません:( –

+0

'SEPARATOR '"、 "''を編集し、Where節であなたはIN句の文字列よりIN( "123"、 "234"、 "254") – Naresh

+0

もう一つの役に立つ関数は 'FIND_IN_SET'です。これを試してみてください – Naresh

関連する問題