私はあなたがすでにそれを持っていたと思います:
UPDATE items SET order_id = 0 WHERE order_id = 4;
UPDATE items SET order_id = order_id + 1 WHERE order_id >= 1 AND order_id < 4;
UPDATE items SET order_id = 1 WHERE order_id = 0;
order_id iのアイテムを位置j(i> j)まで移動するには:
UPDATE items SET order_id = 0 WHERE order_id = i;
UPDATE items SET order_id = order_id + 1 WHERE order_id >= j AND order_id < i;
UPDATE items SET order_id = j WHERE order_id = 0;
order_id iのアイテムを位置j(j> i)に移動するには:
UPDATE items SET order_id = 0 WHERE order_id = i;
UPDATE items SET order_id = order_id - 1 WHERE order_id > i AND order_id <= j;
UPDATE items SET order_id = j WHERE order_id = 0;
別のオプションは、を追加することprevious_sibling
です。すでにリストがロードされていると仮定すると、前の兄弟は[1 => null, 2 => 1, 3 => 2, 4 => 3, 5 => 4]
次のようになります。
UPDATE items SET previous_sibling = 3 WHERE id = 5; #previous_sibling of 4
UPDATE items SET previous_sibling = null WHERE id = 4; # previous_sibling of 1
UPDATE items SET previous_sibling = 4 WHERE id = 1;