MySQL: использование переменной в предложении WHERE IN - PullRequest
0 голосов
/ 14 декабря 2010

Я схожу с ума, пытаясь использовать «массив» значений, полученных из GROUP_CONCAT, в операторе WHERE IN, когда GROUP_CONCAT принимает только один «идентификатор», он работает нормально, а когда требуется больше - нет. *

Как следует:

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 owner_id=@lastid,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);

Кто-нибудь знает, как с этим работать?

Спасибо!

1 Ответ

0 голосов
/ 14 декабря 2010

Какой у вас тип поля для coupon_id, если это не числовой тип, чем он не будет работать.

Один способ добавить цитату (одинарную кавычку) для каждого результата в GROUP_CONCAT Написать

GROUP_CONCAT(coupon_id SEPARATOR '","')

удалить SELECT @coupon_ids

А

в QUERY попробуйте это WHERE coupon_id IN ("@coupon_ids")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...