现有数据库字段如下:
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貌似不执行,想来问问大家有没有这种方法做过的
求告知。谢谢

解决方案 »

  1.   

    删掉listID = X的某个id之前,先获取sort值,执行删除,再将sort值更大的都-1
      

  2.   

    同楼上
    UPDATE books set sortid=(sortid-1) WHERE id>3;
      

  3.   

    同楼上 UPDATE books set sortid=(sortid-1) WHERE id>3;主键情况。------------------------------
    如果是主键要注意顺序就可以了。比如有4
    5
    6如果从6开始减的话一定不行。5与5重复。要从4开始。
    是加的话就得从6开始。
    最好是先order by 一次再update
      

  4.   


    set @i:=0;
    update table
    set sort = (select @i:=@i+1)
    where listID = 1
      

  5.   


    sorry,怪我没说清楚
    我在删除后只想对sort字段排序
    不管ID是多少
      

  6.   


    5楼的朋友,我照你的方法试过了
    不行。
    我用的框架是thinkphp
    用的是thinkphp里面的execute方法
      

  7.   

    mysql Ver 14.14 Distrib 5.1.41, for Win32(ia32)
    下测试过并正确执行的SQL.