Обновление таблицы для увеличения значения для идентификатора пользователя - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть следующая таблица (называемая node_items):

id  node_id position
==  ======= ========
1      1       1
2      1       1
3      2       1
4      2       1
5      2       1
6      2       1
7      3       1
8      3       1
9      3       1
10     3       1

Поле position должно отмечать позицию элементов в узле.В настоящее время все они установлены на 1.Я хочу исправить эту таблицу, установив инкрементную позицию для каждого элемента для node_id.Итак, я получаю следующий результат:

id  node_id position
==  ======= ========
1      1       1
2      1       2
3      2       1
4      2       2
5      2       3
6      2       4
7      2       5
8      3       1
9      3       2
10     3       3

Так что мне как-то нужно сгруппировать каждый элемент по node_id и установить позицию в начальное значение 1 и увеличить его для каждого последующего элемента с этим node_id.

Примечание. Для простоты моего объяснения приведенные выше node_ids показаны в порядке (1,1, 2, 2,2,2,2,3,3,3), но обычно это не так.

Какой запрос можно использовать для постепенного обновления значений позиции для каждого идентификатора узла?

1 Ответ

0 голосов
/ 25 февраля 2019

Исправить таблицу один раз можно с помощью ОБНОВЛЕНИЯ:

SET @n = 0, @p = 1;

UPDATE node_items
SET position = (@p := IF(node_id=@n, @p+1, 1)),
    node_id = (@n := node_id)
ORDER BY node_id, id;

Заставить таблицу поддерживать значения позиции при вставке / обновлении / удалении данных сложнее.По сути, не может сделать это, разрешая одновременные обновления.Вы должны заблокировать таблицу в каждом сеансе, который должен делать записи в таблицу.Это делает параллельные сеансы запущенными последовательно.

Вы можете прочитать мой старый пост об этом здесь: Какой-то «разные индексы автоинкремента» для значений первичного ключа

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