gpt4 book ai didi

mysql - 在不点击每个条目的情况下更新事物列表

转载 作者:可可西里 更新时间:2023-11-01 06:49:21 26 4
gpt4 key购买 nike

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

itemname|  order value (int)
--------+---------------------
salad | 1
mango | 2
orange | 3
apples | 4

从数据库加载时,我只是按 order_value 排序

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

itemname|  order value (int)
--------+---------------------
apples | 4
salad | 1
mango | 2
orange | 3

好的。所以现在我必须在内部更新每个列表项!如果列表有 20 或 100 个项目,那么对于一个简单的拖动操作来说就需要大量更新。

itemname|  order value (int)
--------+---------------------
apples | 1
salad | 2
mango | 3
orange | 4

我宁愿只更新一次。我想到的一种方法是,如果“内部订单”是一个 double 值。

itemname|  order value (double)
--------+---------------------
salad | 1.0
mango | 2.0
orange | 3.0
apples | 4.0

因此,在拖放操作之后,我分配 apples 的值小于它要出现在前面的项目:

itemname|  order value (double)
--------+---------------------
apples | 0.5
salad | 1.0
mango | 2.0
orange | 3.0

.. 如果一个项目被拖到中间某处,它的 order_value 比它出现在之后的那个要大.. 这里我把 orange 移到了 沙拉芒果:

itemname|  order value (double)
--------+---------------------
apples | 0.5
salad | 1.0
orange | 1.5
mango | 2.0

有没有更好的方法来做到这一点?

最佳答案

假设@old是苹果旧位置的值4,@new是新位置1。

set @old = 4;
set @new = 1;

UPDATE Items
SET `order value` =
CASE `order value` WHEN @old THEN @new
ELSE `order value` + SIGN(@old-@new) END
WHERE `order value` BETWEEN LEAST(@old, @new) AND GREATEST(@old, @new);

我使用 MySQL 5.1.52 在您的示例数据上对此进行了测试并且它有效。如果您需要将较早的条目移动到较晚的位置,或者将中间的条目移动等,相同的 SQL 也适用。只需设置 @old@new 的值.

关于mysql - 在不点击每个条目的情况下更新事物列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2824428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com