php执行sql原生语句的问题
时间:2011-11-24
来源:互联网
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
貌似不执行,想来问问大家有没有这种方法做过的
求告知。谢谢
作者: lzsadam 发布时间: 2011-11-24
作者: xuzuning 发布时间: 2011-11-24
作者: amani11 发布时间: 2011-11-24
UPDATE books set sortid=(sortid-1) WHERE id>3;
作者: leiyonglin 发布时间: 2011-11-24
主键情况。------------------------------
如果是主键要注意顺序就可以了。
比如有
4
5
6
如果从6开始减的话一定不行。5与5重复。要从4开始。
是加的话就得从6开始。
最好是先order by 一次再update
作者: ci1699 发布时间: 2011-11-24
set @i:=0; update table set sort = (select @i:=@i+1) where listID = 1
作者: ZT_King 发布时间: 2011-11-24
当然不行,因为你的 id 是主键,主键是不能修改的
sorry,怪我没说清楚
我在删除后只想对sort字段排序
不管ID是多少
作者: lzsadam 发布时间: 2011-11-24
删掉listID = X的某个id之前,先获取sort值,执行删除,再将sort值更大的都-1
同楼上
UPDATE books set sortid=(sortid-1) WHERE id>3;
同楼上 UPDATE books set sortid=(sortid-1) WHERE id>3;
主键情况。------------------------------
如果是主键要注意顺序就可以了。
比如有
4
5
6
如果从6开始减的话一定不行。5与5重复。要从4开始。
是加的话就得从6开始。
最好是先order by 一次再update
2,3,4楼的朋友,谢谢你们的回答
这是一个折中取巧的办法
不适用更复杂的情况,我只是举了个简单的例子
作者: lzsadam 发布时间: 2011-11-24
SQL code
set @i:=0;
update table
set sort = (select @i:=@i+1)
where listID = 1
5楼的朋友,我照你的方法试过了
不行。
我用的框架是thinkphp
用的是thinkphp里面的execute方法
作者: lzsadam 发布时间: 2011-11-24
下测试过并正确执行的SQL.
作者: ZT_King 发布时间: 2011-11-24
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28