コードやデータベース構造が提供されていないので、基本的な順序付けシステムについて説明します。問題を解決する方法を理解していただければ幸いです。
これらが mysql テーブルのデータであると想像してください。
id - parent - title - order
1 - 0 - abc - 1
2 - 0 - xyz - 2
3 - 1 - 123 - 1
4 - 1 - 456 - 3
5 - 1 - 789 - 2
次のようなクエリを作成した場合:
SELECT ... ORDER BY order, id ASC
次のようなツリーがあります。
- root (id:0)
|
|___ abc (id:1)
| |___ 123 (id:3)
| |___ 789 (id:5)
| |___ 456 (id:4)
|
|___ xyz (id:2)
entry (id:5) をクリックして entry789
よりも高い順序にする場合123
、SQL クエリは次のようになります。
UPDATE table SET order = order + 1 WHERE order = order - 1 AND parent = 1
次のクエリ:
UPDATE table SET order = order - 1 WHERE id = 5
ツリーは次のようになります。
- root (id:0)
|
|___ abc (id:1)
| |___ 789 (id:5)
| |___ 123 (id:3)
| |___ 456 (id:4)
|
|___ xyz (id:2)
より柔軟な方法が必要な場合は、次のようなものも使用できます。
(ここでは、1 から 100 までの 100 行があり、id:33 を id:51 の後の場所に移動したいとします)
UPDATE table SET order = order + 1 WHERE order >= 51
UPDATE table SET order = 51 WHERE id = 33
UPDATE table SET order = order - 1 WHERE order BETWEEN 33 AND 50