2010-12-14 76 views
0

我变得疯狂试图使用从GROUP_CONCAT获得的值的“阵列”到语句的WHERE,当GROUP_CONCAT只需要一个“身份证”它的工作原理确定,但其时需要更多它不。的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

什么是对你的coupon_id提交类型,如果没有任何号码类型比它不会工作。您可以为每个结果GROUP_CONCAT加引号(单引号)

一种方式写

GROUP_CONCAT(coupon_id SEPARATOR '","') 

删除SELECT @coupon_ids

而且

在QUERY试试这个WHERE coupon_id IN ("@coupon_ids")

+0

GROUP_CONCAT是与SEPARATOR默认。 选择@coupon_ids有刚拿到报告。 我都试过“@coupon_ids”并做了更换,具有“”加‘@coupon_ids’,它不工作:( – 2010-12-14 13:05:00

+0

我编辑'分离器“‘’”'而在你需要子句不知何故加双引号@coupon_ids,通过你的编程语言。比你:在第字符串将在(“123”,“234”,“254”) – Naresh 2010-12-14 13:15:51

+0

一个更有用的功能是'FIND_IN_SET'试试这个 – Naresh 2010-12-14 13:28:01