SQL-запрос для переупорядочения данных на основе последовательности порядка сортировки - PullRequest
0 голосов
/ 27 июня 2018
tablename =  zones

  ID     sort_order  area_name
======== =========   =========
  1        1          aaaa
  3        2          bbbb
  5        3          cccc
  7        4          dddd
  8        5          eeeee

мне нужно добавить новое имя_области

например: ffff вместо sort_order = 3.

и переупорядочить оставшиеся области sort_orders соответственно, как показано ниже

  ID     sort_order  area_name
======== =========   =========
  1        1          aaaa
  3        2          bbbb
  9        3          ffff
  5        4          cccc
  7        5          dddd
  8        6          eeeee

нужен запрос sql для этого

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Для этого нужно 2 запроса. Прежде всего, вы обновляете sort_orders существующих записей и вставляете новую запись впоследствии:

UPDATE zones SET sort_order=sort_order + 1 WHERE sort_order >= 3;
INSERT INTO zones VALUES (NULL, 3, 'ffff')
0 голосов
/ 27 июня 2018

Используйте UPDATE и INSERT. Я предполагаю, что ID генерируется автоматически. UPDATE освобождает место для новой записи в последовательности sort_order, и вы можете легко вставить.

 UPDATE zones
 SET sort_order = sort_order + 1
 WHERE sort_order >= 3

 INSERT INTO zones(sort_order , area_name) 
 VALUES (3, 'ffff')

Однако, если таблица zones сильно вставлена, вы будете ожидать много блокирующего ожидания.

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