MySQL上的多次更新,无需覆盖数据

时间:2017-10-12 18:47:52

标签: python mysql django

我使用jQuery sortable来排序我的表行。新订单保存在后端,我正在使用python,Django。我的数据库中有一个名为priority.

的列

这就是我处理后端逻辑的方法。最后一个数组是2D列表基本上,我希望发生以下情况:

previous_order = [ 1,2,3,4,5 ]
new_order = [3,4,5,1,2]

orders_to_rearrange = [                  ### gets passed in a function
    [1,3], [2,4], [3,5], [4,1], [5,2]
]

### UPPDATE the following:
### Priority 1 to become 3
### Priority 2 to become 4
### Priority 3 to become 5
### Priority 4 to become 1
### Priority 5 to become 1

以上是一个很好的例子,但是当我遇到像这样的复杂开关时:

### Priority 5 to become 2
### Priority 2 to become 4
### Priority 4 to become 1

请注意,在5变为2之后,4变为2,之前的变为2。现在我最终得到两个优先级2,因为它会覆盖循环内的语句。

我认为MySQL中的WHEN THEN case语句会有所帮助,但它最终会像我循环那样做。

UPDATE my_table
    SET priority = 
        CASE priority
        %s
        ELSE priority
END

注意:我有一个函数可以将我的2D数组转换为WHEN __ THEN __语句,并将替换该%s模式。

有人可以给我一个关于如何在一个语句中同时更新行而不覆盖数据的建议吗?

非常感谢!!!

1 个答案:

答案 0 :(得分:1)

我认为这可能只是修复案件陈述......除非我没有正确理解问题:

update my_table
   set priority = case when priority = 1 then 3
                       when priority = 2 then 4
                       when priority = 3 then 5
                       when priority = 4 then 1
                       when priority = 5 then 1
                       else priority end
 where priority > 0;