mysql 互换两行数据中的一个值(排序互换) 您所在的位置:网站首页 mysql数据字段排序 mysql 互换两行数据中的一个值(排序互换)

mysql 互换两行数据中的一个值(排序互换)

2023-08-01 00:55| 来源: 网络整理| 查看: 265

需求:实现列表排序互换功能,每次排序向上加一或向下减一,使排序号互换

分析:要达到这种需求,首先要拿到主动排序数据和被动排序数据两条数据进行更新,这样的话,仅从拿到的排序值处理,要进行多次查询和更新。不想做频繁的查询更新操作,想着能使用一条sql语句进行更新,所以就在网上查了下使用sql更新互换两行的值,没有太好的结果,自己摸索着写了一条。如下:

第一版

同一个表内的两条数据,分别用别名限制取出需要交换的两条数据,然后进行set值。

UPDATE Table AS T1, Table AS T2 SET T1.sort = T2.sort, T2.sort = T1.sort WHERE T1.type = T2.type AND T1.sort = 1 AND T2.sort = 2 AND T1.type = 1

第二版:

第一版的sql,被动排序数据的sort值是直接加1或者减1的,如果两条排序中间的数据被删了会造成排序更新的混乱,所以使用sql对这种情况进行了优化,直接贴代码

UPDATE Table AS T1, Table AS T2, (SELECT sort FROM Table T3 WHERE T3.type = #{type} AND T3.sort > #{sort} ORDER BY T3.sort ASC limit 1) T4 (SELECT sort FROM Table T3 WHERE T3.type = #{type} AND T3.sort ; #{sort} ORDER BY T3.sort DESC limit 1) T4 SET T1.sort = T2.sort, T2.sort = T1.sort WHERE T1.type = T2.type AND T1.sort = #{sort} AND T1.type = #{type} AND T2.sort = T4.sort

使用limit排序取出被动排序数据的sort值,然后进行sort值的互换,解决问题。

注:update 语句where 后面不能使用  ORDER BY   DESC limit 关键词吧,直接在where 加限制报错了。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有