现有数据库字段如下:
id -- pk
listID -- 所属书架ID
bookID -- 图书ID
sort -- 对书架里的书排序字段表中数据如下:
id listID bookID sort
1 1 1 1
2 1 2 2
3 1 3 3
4 1 4 4假如我删掉id=3
则sort字段变成1, 2, 4
想在删除时重新排序
使之成为1, 2, 3
又不想foreach循环更新数据库
所以用如下语句:set @i:=0;
update table
set sort = (@i:=(@i+1))
where listID = 1貌似不执行,想来问问大家有没有这种方法做过的
求告知。谢谢
id -- pk
listID -- 所属书架ID
bookID -- 图书ID
sort -- 对书架里的书排序字段表中数据如下:
id listID bookID sort
1 1 1 1
2 1 2 2
3 1 3 3
4 1 4 4假如我删掉id=3
则sort字段变成1, 2, 4
想在删除时重新排序
使之成为1, 2, 3
又不想foreach循环更新数据库
所以用如下语句:set @i:=0;
update table
set sort = (@i:=(@i+1))
where listID = 1貌似不执行,想来问问大家有没有这种方法做过的
求告知。谢谢
UPDATE books set sortid=(sortid-1) WHERE id>3;
如果是主键要注意顺序就可以了。比如有4
5
6如果从6开始减的话一定不行。5与5重复。要从4开始。
是加的话就得从6开始。
最好是先order by 一次再update
set @i:=0;
update table
set sort = (select @i:=@i+1)
where listID = 1
sorry,怪我没说清楚
我在删除后只想对sort字段排序
不管ID是多少
5楼的朋友,我照你的方法试过了
不行。
我用的框架是thinkphp
用的是thinkphp里面的execute方法
下测试过并正确执行的SQL.