假设我们有表:
announces_id announces_pos announces_title
如何通过单个查询重新计算所有announces_pos? 例: 将announces_pos设置为id 2上的3,所有下一行(announces_pos> 3)应重新计算
答案 0 :(得分:1)
你需要处于旧位置。比增加旧的和新的之间的所有位置。
DO @old_pos:=announces_pos FROM announces WHERE announces_id = 2;
UPDATE announces SET announces_pos = IF(announces_id = 2, 3, announces_pos + 1) WHERE announces_pos BETWEEN 3 AND @old_pos;