我有一个表,其中有一个名为uid
的列,它使用自动增量,并使用1,2,3等更新。现在我有cron作业删除了超过2天的行。所以现在我的uid列是2345到n ..我想再次将它重置为1到n。我试过下面的代码
UPDATE `tv` SET `uid` = ''
我正在考虑遍历所有行并通过php脚本更新uid,是否还有其他单一SQL命令的替代方案?
答案 0 :(得分:2)
您可以尝试这样的事情:
UPDATE `tv` t
set t.`uid` = (SELECT count(*)
from `tv` s
WHERE t.`uid` >= s.`uid`)
这将计算有多少uid小于或等于更新的uid,所以当第一个UID,即2345正在更新时,只有1个uid小于/等于他所以它会得到值1等等......
编辑:试试这个 -
UPDATE `tv` t
INNER JOIN(SELECT s.`uid`,count(*) as cnt
from `tv` s
INNER JOIN `tv` ss
ON(s.`uid` >= ss.`uid`)
GROUP BY s.`uid) tt
ON(t.`uid`=tt.`uid`)
SET t.`uid` = tt.cnt
答案 1 :(得分:1)
为什么不通过以下方式减少uid:
update tv set uid = uid -1