更新事物列表而不会访问每个条目

bob*_*obo 6 mysql sql sql-update

我在数据库中有一个用户应该能够订购的列表.

itemname|  order value (int)
--------+---------------------         
salad   |  1
mango   |  2
orange  |  3
apples  |  4
Run Code Online (Sandbox Code Playgroud)

从数据库加载,我只是order by order_value.

通过拖放,他应该能够移动apples,使其出现在列表的顶部..

itemname|  order value (int)
--------+---------------------         
apples  |  4
salad   |  1
mango   |  2
orange  |  3
Run Code Online (Sandbox Code Playgroud)

好.所以现在在内部我必须更新每个列表项目!如果列表有20或100个项目,那么对于简单的拖动操作来说,这是很多更新.

itemname|  order value (int)
--------+---------------------         
apples  |  1
salad   |  2
mango   |  3
orange  |  4
Run Code Online (Sandbox Code Playgroud)

我宁愿只做一次更新.我想到的一种方式是"内部订单"是否为double值.

itemname|  order value (double)
--------+---------------------         
salad   |  1.0
mango   |  2.0
orange  |  3.0
apples  |  4.0
Run Code Online (Sandbox Code Playgroud)

在拖放操作之后,我赋值apples的值小于它出现在前面的项目:

itemname|  order value (double)
--------+---------------------         
apples  |  0.5
salad   |  1.0
mango   |  2.0
orange  |  3.0
Run Code Online (Sandbox Code Playgroud)

..如果一个项目被拖到某个地方的中间,它order_value比它后面的那个更大..在这里我移动orange到之间saladmango:

itemname|  order value (double)
--------+---------------------         
apples  |  0.5
salad   |  1.0
orange  |  1.5
mango   |  2.0
Run Code Online (Sandbox Code Playgroud)

有关更好的方法的任何想法吗?

bob*_*obo 1

我最终使用了邻接表。我当时并不知道这件事。