相关文章推荐
刀枪不入的红薯  ·  mysql ...·  6 天前    · 
火星上的火腿肠  ·  MySQL8.0.19 ...·  3 天前    · 
憨厚的皮蛋  ·  Spring cloud ...·  7 月前    · 
越狱的刺猬  ·  如何清理 SQL server ...·  1 年前    · 
豁达的帽子  ·  nodejs + express ...·  1 年前    · 

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

分析:要达到这种需求,首先要拿到主动排序数据和被动排序数据两条数据进行更新,这样的话,仅从拿到的排序值处理,要进行多次查询和更新。不想做频繁的查询更新操作,想着能使用一条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,
        <if test="operateType == 0">
            (SELECT sort FROM Table T3 WHERE T3.type = #{type} AND T3.sort > #{sort} ORDER BY T3.sort ASC limit 1) T4
        <if test="operateType == 1">
            (SELECT sort FROM Table T3 WHERE T3.type = #{type} AND T3.sort &lt; #{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 加限制报错了。

CREATE TABLE `product` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '产品id', `name` VARCHAR(50)...
SQL Server行列转换 Pivot UnPivot PIVOT用于将列旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR ...
数据的两列进行交换,可以有很多的方式,但是用一句实现,如何编写,最近在浏览别人的分享的时候,发现了一个很好的方法,如下 update table set first=second, second=first; 其table需要写上你需要的的名字,first和second都是table的列属性 在这句后面可以加上条件还可以做其他的精确查询
如果你要获取一个一行数据列的最大,可以先使用 `SELECT` 语句查询到这一行数据,然后再使用 `MAX()` 函数获取这一行的最大。 例如,假设你要获取 `table_name` `id` 为 1 的行的最大,可以使用以下 SQL 语句: SELECT MAX(col1), MAX(col2), MAX(col3) FROM table_name WHERE id = 1; 其,`col1`、`col2`、`col3` 是你想要获取最大的列名。这条 SQL 语句会返回一个包含这一行这些列最大的行。请注意,这里的 `id` 是假设的,你需要根据实际情况替换为对应的列名和