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框架


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM