zoukankan      html  css  js  c++  java
  • MySQL 上移/下移/置顶

    在编写网站系统时,难免会用到上移、下移、置顶的功能,今天小编就介绍一下我的思路。

    首先,需要一张数据表:

    CREATE TABLE `a` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `age` int(11) NOT NULL,
      `gender` varchar(255) NOT NULL,
      `psw` varchar(255) NOT NULL,
      `seq` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
    
    INSERT INTO `a`(`id`, `name`, `age`, `gender`, `psw`, `seq`) VALUES (1, 'zsan', 30, 'f', '123456', 1);
    INSERT INTO `a`(`id`, `name`, `age`, `gender`, `psw`, `seq`) VALUES (2, 'lisi', 31, 'f', '123456', 2);
    INSERT INTO `a`(`id`, `name`, `age`, `gender`, `psw`, `seq`) VALUES (3, 'wangwu', 32, 'm', '123456', 3);
    INSERT INTO `a`(`id`, `name`, `age`, `gender`, `psw`, `seq`) VALUES (4, 'zhaoliu', 33, 'm', '123456', 4);
    INSERT INTO `a`(`id`, `name`, `age`, `gender`, `psw`, `seq`) VALUES (5, 'baiqi', 34, 'm', '123456', 5);
    INSERT INTO `a`(`id`, `name`, `age`, `gender`, `psw`, `seq`) VALUES (6, 'hongba', 35, 'f', '123456', 6);

    字段中有用的是id和seq,id作为主键标识一条数据,seq标记这条数据的顺序,也是在上移、下移以及置顶操作中,order by的字段。

    一、置顶

    先说思路,首先,需要获取需要置顶的数据POJO,将表中seq字段小于POJO顺序的所有数据的seq增加1,再将POJO的seq设置为1,最后在查询表时,按seq增序排列,就能看到置顶的效果。

    上SQL代码:

    -- 置顶id=4,seq=4的数据
    update a set seq = seq+1 where seq<4;
    update a set seq=1 where id=4;
    select * from a ORDER BY seq asc

    上效果图:

    置顶前查询:

    置顶后查询:

    二、上移

    思路:

    获取本条数据和上一条数据内容,将两条数据的seq作交换

    将原数据库中id为2和3的数据内容交换,从前端传入本条数据的id,即3,获取本条数据内容,将获取到的内容存入POJO3

    select * from a where id=3

    获取上一条数据内容(这里POJO3.getSeq()的值为4,各位小伙伴执行SQL语句时,自行替换),将获取到的内容存入POJO2。

    SELECT * from a WHERE ( seq < POJO3.getSeq()  OR seq=(SELECT MIN(seq) FROM a ) )  ORDER BY seq DESC limit 1

    交换POJO2和POJO3的顺序。

    update a set seq=POJO3的seq值 where id=2;
    update a set seq=POJO2的seq值 where id=3;

     上效果图

     上移前查询:

     

     上移后查询:

     

    三、下移

    思路:

    获取本条数据和下一条数据内容,将两条数据的seq作交换

    将原数据库中id为3和4的数据内容交换,从前端传入本条数据的id,即3,获取本条数据内容,将获取到的内容存入POJO3

    select * from a where id=3

    获取下一条数据内容(这里POJO3.getSeq()的值为3,各位小伙伴执行SQL语句时,自行替换),将获取到的内容存入POJO4。

    SELECT * from a WHERE ( seq > POJO3.getSeq()  OR seq=(SELECT MAX(seq) FROM a ) )  ORDER BY seq ASC limit 1

    交换POJO3和POJO4的顺序。

    update a set seq=POJO4的seq值 where id=3;
    update a set seq=POJO3的seq值 where id=4;

     上效果图

     下移前:

     下移后:

     

    以上均为单独操作数据库文件结果,现附上完整Spring MVC实现上述内容的   完整代码 

    备注:代码使用Spring Boot框架

  • 相关阅读:
    利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习) 转 武胜
    探讨C语言中的回调函数
    BusyBox
    ISC的DHCP服务器
    exchange 2007 安装
    strcpy和memcpy的区别 | strcpy和strncpy的区别
    爱不是什么
    编译libnl时候的问题
    Linux中find常见用法示例
    ubuntu firefox flash 插件安装
  • 原文地址:https://www.cnblogs.com/wulisz/p/9714726.html
Copyright © 2011-2022 走看看