大家可能常常遇到像文章列表、商品列表,业务要求我们实现列表能自动上下移动和置顶。遇到这样我们大多数往往想的是很简单,给个排序字段sort类型为INT不就行了吗?

它的实现方法,每当新增一条记录的时候,sort都会在前一条记录上+1。例如:我们用这5条记录来进行排序。记录1,sort:1;记录2,sort:2;记录3,sort:3;记录4,sort:4;记录5,sort:5。现在有这么一个需求,记录4往上移动。实现它很简单,只需要将它与记录3交换sort值。反之,记录4往下移动也是一样,只需要将它与记录5交换sort值。但是需要将记录4置顶,这里不再是将记录4与记录1进行位置的交换了,是需要将记录4的位置设置为1并且记录1、记录2、记录3的位置,都需要+1,造成循环调用数据库去更新这些数据的位置。案例4条数据不觉得性能有什么影响,但是数据量上万、十万、百万的时候呢?可想而知对用户体验、应用系统、数据库系统都非常大。

实际上针对以上问题我们只需要变相的将sort设置为double类型,进而完美的解决。

它的实现方法,每当新增一条记录的时候,sort都会在前一条记录上+1。例如:我们用这5条记录来进行排序。记录1,sort:1;记录2,sort:2;记录3,sort:3;记录4,sort:4;记录5,sort:5。现在有这么一个需求,记录4往上移动。实现它很简单,只需要将它与记录3交换sort值。反之,记录4往下移动也是一样,只需要将它与记录5交换sort值。但是需要将记录4置顶,这里只需要将记录1的sort值1减0.1等于0.9,即记录4的sort值。这样就无需再调整记录1、记录2、记录3的值。这样就很好的解决了大量数据更新的问题。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐