Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11685
Последний выпуск: 19.06.2015

WHERE IN () не работает как надо

10K
20 января 2015 года
Frenzyk
41 / / 16.01.2009
Подскажите, пожалуйста. Есть запрос:


 
Код:
SET @suf:=0;
SET @nums:='1,2,3';
UPDATE `table` SET `col` = concat(`col`, ' (', @suf:=@suf+1,')')  WHERE  `cf_vendlistid` IN (@nums);
А так рабоатет конечно:
 
Код:
SET @suf:=0;
UPDATE `table` SET `col` = concat(`col`, ' (', @suf:=@suf+1,')')  WHERE  `cf_vendlistid` IN (1,2,3);
Проблема в том, что в IN () реально SELECT, возвращающий столбец с содиржимым типа:
1,
4,6
8,
13,14,17
...
1.9K
21 января 2015 года
Kuzya
183 / / 19.03.2008
 
Код:
SET @suf:=0;
SET @nums:='1,2,3';
":=" - точно mysql?
10K
22 января 2015 года
Frenzyk
41 / / 16.01.2009
mysql 5.5, точно!
1.9K
22 января 2015 года
Kuzya
183 / / 19.03.2008
из руководства по мускулю -"6.2.3.4 Тип множества SET

SET - это строковый тип, который может принимать ноль или более значений, каждое из которых должно быть выбрано из списка допустимых значений, определенных при создании таблицы. Элементы множества SET разделяются запятыми. Как следствие, сами элементы множества не могут содержать запятых.

Например, столбец, определенный как SET("один", "два") NOT NULL может принимать такие значения:"

а у вас
 
Код:
SET @nums:='1,2,3';
числовой тип
10K
23 января 2015 года
Frenzyk
41 / / 16.01.2009
Ох уж этот рунет! Запостишь проблему, а в ответах... могут объснить, что тебе это не нужно; тыкнут в мануал, который ты уже читал и нихрена не понял; не увидят за деревьями лес и "решат" проблемки внутри проблемы...
"Спасибо" русскоговорящим "зкспертам". И спасибо моему знанию английского.
И да, вопрос можно закрыть и удалить, ибо всё равно не решен.
1.9K
24 января 2015 года
Kuzya
183 / / 19.03.2008
Для с претензиями к рунету!!!

Цитата: Kuzya

а у вас
 
Код:
SET @nums:='1,2,3';
числовой тип


тут я ошибся, значение в переменной будет строковым, а не числовым массивом

решение:
create table `nums` ( `id` integer unsigned );
insert into `nums` ( `id` ) values (1),(2),(3);

UPDATE `table` SET `col` = concat(`col`, ' (', @suf:=@suf+1,')') WHERE `cf_vendlistid` IN (select `id` from `nums`);

а вот эта хрень >> SET @nums:='1,2,3'; << работать не будет.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог