2012-12-13 27 views
0

我是SQL-fu上的一個白皮帶,我需要一些幫助。是否有可能對不同WHERE參數的sqlite3表執行條件更新?我正在嘗試製作觸發器,但未能使其正常工作。 東西在的線:對不同WHERE參數的sqlite3表進行條件更新

CREATE TRIGGER IF NOT EXISTS table_reorder BEFORE UPDATE ON table FOR EACH ROW BEGIN 
*IF* new.index > index *THEN* index + 1 WHERE index > new.index END 
*ELSE IF* new.index < index *THEN* index - 1 WHERE index < new.index END 
END; 

或者,如果你有更好的想法,使這項工作,請讓我知道。我試過SQLite: UPDATE column of multiple rows with sequential value上提出的解決方案,但它也沒有工作。

+0

你能否用英文描述你想要做什麼?我不知道。此外,這並不會觸發我作爲適當的觸發器的使用。我想也許你應該發佈你嘗試過的其他代碼不起作用。這可能是一個更好的起點。 – dan1111

+0

我想要有一個獨特的整數,用於定位項目的重要性排序。當我更新一個條目的重要性時,我不知道如何使這個整個列自我更新。如果我更新並輸入,整個列必須相應地刷新/更新。是否有意義? – joe

+0

我懷疑這樣的觸發器對於訂單欄是有意義的。如果你只是想交換兩個條目的順序呢?理論上,沒有其他條目需要改變。 –

回答

0

您可以在觸發器上使用WHEN condition。 如果你想更新,你必須真正執行它:

CREATE TRIGGER table_reorder_larger 
BEFORE UPDATE OF index ON MyTable 
FOR EACH ROW 
WHEN NEW.index > OLD.index 
BEGIN 
    UPDATE MyTable SET index = index + 1 WHERE index > NEW.index; 
END; 

CREATE TRIGGER table_reorder_smaller 
BEFORE UPDATE OF index ON MyTable 
FOR EACH ROW 
WHEN NEW.index < OLD.index 
BEGIN 
    UPDATE MyTable SET index = index - 1 WHERE index < NEW.index; 
END; 

然而,這將遞歸地運行相同的觸發,所以你最好禁用recursive triggers

+0

會遞歸運行這個觸發器只是一個優化/不好的做法問題或是否有任何問題?謝謝你,雖然。 – joe

+0

該觸發器將再次運行*,用於'index'值的更進一步。 –