powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сгенерировать непрерывную возрастающую последовательность?
3 сообщений из 3, страница 1 из 1
Как сгенерировать непрерывную возрастающую последовательность?
    #33235734
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сгенерировать непрерывную возрастающую последовательность из целых положительных чисел от 1.. N для уже имеющейся таблицы?

Есть например таблица пользователей:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table t2 ( 
 uid int not null auto_increment primary key,
 name varchar( 30 ));

insert into t2 (name) values 
 ('Joe'),
 ('Kate'),
 ('David'),
 ('Mark');

Необходимо добавить третие поле position, чтобы значения были 1, 2, 3, 4. В общем случае кол-во записей может быть очень большим. Должно получиться, что-то вроде этого:

Код: plaintext
1.
2.
3.
4.
5.
6.
   uid  name    position
------  ------  --------
      1   Joe             1 
      2   Kate            2 
      3   David           3 
      4   Mark            4 
Значения полей t2.uid и t2.position необязательно должны совпадать.

Думал, что можно повесить на него AUTO_INCREMENT - оказывается нельзя.
Код: plaintext
1.
2.
3.
4.
5.
alter table t2 add position int not null auto_increment

Error Code :  1075 
Incorrect table definition; there can be only one auto column and it must be defined as a key
( 0  ms taken)

Как можно выйти из этой ситуации (какой должен быть UPDATE-запрос, чтобы сгенерить такую последовательность на поле position)?
...
Рейтинг: 0 / 0
Как сгенерировать непрерывную возрастающую последовательность?
    #33237202
max(id)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так подойдет?
Код: plaintext
1.
set @n :=  0 ;
update t2 set position = (@n := @n + 1 );
Если надо чтобы нумерация была по возрастанию(убыванию) uid или других полей, то используй в UPDATE-е ORDER BY. Например :
Код: plaintext
1.
2.
set @n :=  0 ;
update t2 set position = (@n := @n + 1 )
order by uid;
P.S. можно и одним SQL обойтись, но сегодня думать лень - суббота ;-))
...
Рейтинг: 0 / 0
Как сгенерировать непрерывную возрастающую последовательность?
    #33237266
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 max(id)

Здорово, то что надо! Огромное спасибо!

Я никак не мог понять, как запихнуть выражение @n:=@n+1 в UPDATE. Как обычно оказалось, решение лежит на поверхности...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сгенерировать непрерывную возрастающую последовательность?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]