mysql 实现上移和下移 和置顶
实现上移和下移 和置顶
今天实现一个功能 就是对数据的上移和下移和顶置
// An highlighted block
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`order` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `test`(`id`, `name`, `order`) VALUES (1, '1', 1);
INSERT INTO `test`(`id`, `name`, `order`) VALUES (2, '2', 2);
INSERT INTO `test`(`id`, `name`, `order`) VALUES (3, '3', 3);
INSERT INTO `test`(`id`, `name`, `order`) VALUES (4, '3', 4);
INSERT INTO `test`(`id`, `name`, `order`) VALUES (5, '4', 5);
INSERT INTO `test`(`id`, `name`, `order`) VALUES (6, '6', 6);
首先字段中有用的是id和order,id作为主键标识一条数据,order标记这条数据的顺序,也是在上移、下移以及置顶操作中,order by的字段。
上移
主要思路是获取本条数据和上一条数据内容,将两条数据的order标记作交换
将原数据库中id为2和3的数据内容交换,从前端传入本条数据的id,即3,获取本条数据内容,将获取到的内容存入实体类中test3
// An highlighted block
//select * from test where id=3
//这样就获取到 id为2的数据了
SELECT id , order from test WHERE ( order< (select * from test where id=3) OR order=(SELECT MIN(order) FROM test ) ) ORDER BY order DESC limit 1
update test set order =test3 的order 值 where id=2;
update test set order =test2 的order 值 where id=3;
下移
几乎思路相同只是取值的范围相反
SELECT id , order from test WHERE ( order> (select * from test where id=3) OR order=(SELECT MAX(order) FROM test ) ) ORDER BY order ASC limit 1
update test set seq=test4 的order 值 where id=3;
update test set seq=test3 的order 值 where id=4;
置顶
-- 置顶id=4,order=4的数据
update test set order= order+1 where order<4;
update test set order=1 where id=4;
select * from test ORDER BY order asc