使用触发器在插入/更新之前对相邻行(更高/更低)重新排序

时间:2015-09-20 11:24:45

标签: sql database postgresql triggers

给出下表books

 id | listorder 
----+-----------
  3 |         1
  2 |         2
  1 |         3
  4 |         4
  6 |         5
  7 |         6
  5 |         7

我可以通过执行以下命令将id = 3的行更新为listorder = 6,首先在更新新位置之前重新排序相邻的行:

UPDATE books
SET listorder = listorder - 1
WHERE listorder <= 6 -- The new position
  AND listorder > (SELECT listorder 
                   FROM books WHERE id = 3);

UPDATE books
SET listorder = 6 -- The new position
WHERE id = 3;

如何创建一个在 UPDATE或INSERT之前运行的触发器功能,这样我需要做的就是更新listorder,其他行将自动重新排序,无论是否在listorder中移动更高或更低?

0 个答案:

没有答案