一次更新/增加多行上的单个列

Jor*_*ein 23 mysql

我正在尝试向列中添加行,将order最新列设置为1,并将所有其他行从那里开始计数.

在这种情况下,我添加一个order = 0的新行,然后使用此查询将所有行更新为1.

"UPDATE favorits SET order = order+1"
Run Code Online (Sandbox Code Playgroud)

但是,所发生的是所有行都更新为相同的值.我得到了一堆收藏夹,例如订单6,当它应该是一个1时,下一个带2,依此类推.

如何更新这些行的方式按照它们的方式对它们进行排序?

谢谢,
〜乔丹

Jos*_*ian 45

SET @a = 0;  
UPDATE favorits SET order = @a:=@a+1;
Run Code Online (Sandbox Code Playgroud)


Sim*_*mon 22

你告诉数据库做什么通过将其顺序字段递增1来更新表中的每条记录.所以每条记录总是具有相同的价值.我相信你试图将最新记录设置为1,将最旧的记录设置为(无记录+ 1).

所以也许你可以试试这个:

set @count = (SELECT COUNT(ID) from favorits);
UPDATE favourits SET order = @count-ID+1
Run Code Online (Sandbox Code Playgroud)

现在假设没有删除任何记录.在这种情况下,您必须对此进行调整并将最新记录设置为1,然后按ID排序每个先前记录的订单值.

所以这就是方法:

set @i=0;
set @Count=(SELECT COUNT(*) from favorits);

UPDATE favorits SET `order` = @Count-(@i:=@i+1)+1;
Run Code Online (Sandbox Code Playgroud)