我想将条目移动到有序列表的中间,其中的顺序由唯一列“orderby”维护。当将值移动到列表的中间时,我指定 orderby 值,如果该值已被采用,则旧行的 orderby 应增加或减少 1,具体取决于移动的方向。
出于测试目的,我有这张表:
CREATE TABLE test(
orderby integer,
UNIQUE(orderby) )
我目前有以下触发器:
CREATE TRIGGER [test_insert]
BEFORE UPDATE OF [orderby]
ON [test]
FOR EACH ROW
BEGIN
UPDATE test
SET orderby = orderby + 1
WHERE NEW.orderby = orderby;
END
但是,这仅在触发器创建的 orderby 值未使用时才有效。
即,如果我运行UPDATE test SET orderby = 2 WHERE orderby = 1
,它将使用具有 orderby 值 {1; 2},但不适用于具有值 {1; 的表;2;3}
我该如何解决这个问题?或者也许完全不同?
编辑:如果我不能让它工作,我想我总是可以选择增加一个范围内的所有 orderby-s,但是,我仍然想让它工作,这将允许我使用值或 orderby 中的间隙并获得更高的效率。