Запрос mySQL для перемещения элемента в списке

Можете помочь, правильно ли я сделал или же есть другие варианты, для более оптимального перемещения элемента в списке?

Есть список:

| id | name|
 1   | f1 
 2   | f2 
 3   | f3
 4   | f4
 5   | f5
 6   | f6
 7   | f7
 8   | f8
 9   | f9

Допустим нужно сместить элемент f6 нужно переместить из позиции 6 на позицию 4 смещая элемент f4 и последующие на позицию вниз, т.е. получить такой список:

|  id | name
  1   | f1
  2   | f2
  3   | f3
  4   | f6
  5   | f4
  6   | f5
  7   | f7
  8   | f8
  9   | f9

Для этого я использую следующий запрос в mySQL:

LOCK TABLES `categories` WRITE;
DELETE FROM `categories` WHERE `id` = '0';
UPDATE `categories` 
    SET `id`= 
    (CASE 
        WHEN `id` = '6' THEN 0 
        ELSE `id`+'1'  

    END) 
    WHERE `id` > '3' AND `id` < '7' order BY `id` DESC;
UPDATE `categories` SET `id` = '4' WHERE `id` = '0';

UNLOCK TABLES;

Данный запрос блокирует таблицу от записи (LOCK TABLES categories WRITE), если будет строка с индексом равный 0 (вдруг будет по ошибке там такой), то удаляет ее (DELETE FROM categories WHERE id = '0').

Следующие строки кода находит строки с позиции 4 (на которую нужно переместить) до позиции 6 (с которой перетаскивают) и увеличивает id на 1 значение, кроме строки с id = 6, ей назначают индекс 0.

Дальше уже строку с индексом id = 0, меняют на 4 позицию (UPDATE categories SET id = '4' WHERE id = '0').


Ответы (0 шт):