SQL-запрос для переупорядочения данных на основе последовательности порядка сортировки

0
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
    Обновите 'cccc' с помощью 'ffff' и добавьте новую строку с помощью 'eeee'. Это логика. Теперь вам нужен один запрос на обновление и один запрос на вставку. Попробуй.
Теги:

2 ответа

1
Лучший ответ

Используйте 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 сильно вставлена, вы испытаете много блокировки ожидания.

1

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

UPDATE zones SET sort_order=sort_order + 1 WHERE sort_order >= 3;
INSERT INTO zones VALUES (NULL, 3, 'ffff')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню