码迷,mamicode.com
首页 > 数据库 > 详细

MySQL 上移/下移/置顶

时间:2018-10-10 14:28:10      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:val   数据   arc   gen   inno   class   href   date   code   

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

首先,需要一张数据表:

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, zhangsan, 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实现上述内容完整代码

 

MySQL 上移/下移/置顶

标签:val   数据   arc   gen   inno   class   href   date   code   

原文地址:https://www.cnblogs.com/wulisz/p/9714726.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!