假設我有以下結果從一個MySQL數據庫表中設置:移位值向下一個表中的鏈
+----+------+-------+
| ID | type | value |
+----+------+-------+
| 8 | A | 1435 |
| 9 | B | 7348 |
| 10 | A | 1347 |
| 11 | A | 3478 |
| 12 | A | 4589 |
| 13 | B | 6789 |
+----+------+-------+
我想刪除行ID 8和外地「值」推值按照這種方式,每一行都具有先前條目的值,但隻影響字段'type'與被刪除的行相同的那一行(在這種情況下爲'A')。
也就是說,刪除行ID 8應最終產生以下:
+----+------+-------+
| ID | type | value |
+----+------+-------+
| - | - | - | *
| 9 | B | 7348 | |
| 10 | A | 1435 | * |
| 11 | A | 1347 | * |
| 12 | A | 3478 | * |
| 13 | B | 6789 | V
+----+------+-------+
ID 10已從ID 8繼承的值,然後從ID 10 ID,依此類推11所繼承。不過請注意,類型'B'的行不受影響。
所以問題:有沒有辦法執行這個值的「轉移」,而不必逐一查詢和更新每一行?在一個理想的世界中,我會做一個查詢來完成移位,然後再執行另一個查詢來刪除行,但我不確定這是否可行。
(此外,我寧可不使用觸發器,因爲我打算在應用程序中封裝了所有的應用程序邏輯)
在查詢?我對此表示懷疑。每個更新都是一個新的查詢。我會推薦一個SQL過程,但如果你不想要那些,我想你堅持循環構造。爲了加快速度,請使用交易。 – clentfort
我認爲可以收集所有需要更新的行(temptemtable)(#temptable)。從這裏,你可以計算新的值,並使用一個更新語句來更新你的主表。那麼你不需要一個循環contstruction。 –
編輯:你可以使用ROW_NUMBER()來移動行。由於這在mysql中不可用,因此請在此問題上檢查OMGPonies的答案:http://stackoverflow.com/questions/1895110/row-number-in-mysql –