在先前更新记录时增加行的列

时间:2016-09-01 09:32:27

标签: mysql sql

假设我有一个像这样的表结构:

ID (PK), Parent_ID (FK), Title, Position

和这样的行:

1, 1, Apple, 1
2, 1, Orange, 2
3, 1, Banana, 3
4, 1, Lime, 4
5, 1, Grapefruit, 5
6, 2, Lemon, 1

现在,假设我想运行以下查询:

UPDATE table SET Position = 1 WHERE ID = 3

如何更新其他行的位置字段,以便数字正确递增到记录最初位置列表中的位置。请注意,这应该只影响具有相同Parent_ID的行。

所以完成后。它看起来像这样:

1, 1, Apple, 2
2, 1, Orange, 3
3, 1, Banana, 1
4, 1, Lime, 4
5, 1, Grapefruit, 5
6, 2, Lemon, 1

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要运行其他行的多个更新。

通用解决方案:

/** initial update or insert **/
UPDATE table SET Position = 1 WHERE ID = 3;

/** update of the other sequence **/
UPDATE table Set Position = CASE WHEN Position >= 1 THEN Position + 1 ELSE Position - 1 End where id <> 3

答案 1 :(得分:0)

更新位置介于1和3(含)之间的记录,但ID不等于刚刚更新的记录的ID(3),并且还提供parent_id:

UPDATE table SET Position = Position + 1
WHERE ID <> 3 and Position>=1 and Position<3 and Parent_ID=1