概述:
最近公司的后台管理新需求是做一个某列表的拖拉排序功能,本来认为这个功能实现也挺简单的,但实际做起来,其实也会遇到一些问题。因此,我决定写篇文章来给大家分享一下。
准备:
1、排序的数据存储实现分析:
既然是排序,那么就是要求每行数据要有明确的前后区分,也就是要求排序的字段有唯一性,唯一性当然会想起表主键id,但是我们不可能对主键进行修改的,这样会导致一些根据主键关联的可能会出现问题。
那我们只能创建一个新的字段decimal(11,4)类型的sort,并且建立唯一索引,来区分这个排序了。这里为什么是decimal(11,4)类型,而不是int类型呢,这个我会在文章后面解释。
2、排序的算法选择:
假设我这里的排序是[24=>1,19=>2,18=>3,17=>4,16=>5,15=>6]
拖拉排序有可能是拖到第一条,也有可能拖到最后一条,还有可能拖到中间一条。
但是无论数据从哪个位置拖到新位置,无非是在新位置的前后两条排序中间创建一个新的排序,而它旧的排序就删除。
比如说我这里的id15想要拖到id19与id18之间: