在編寫網站系統時,難免會用到上移、下移、置頂的功能,今天小編就介紹一下我的思路。
首先,需要一張數據表:
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框架