【小设计】之 字段排序

一、需求


需求:可以自定义排序

  1. 可以将一个记录移动到另一记录的上方或下方
  2. 可以置顶

原型,如下:

姓名手机号操作(排序)
滴滴+86-13444444444移动
啦啦+86-13444444445移动 置顶
哈哈+86-13444444446移动 置顶
嘻嘻+86-13444444447移动 置顶


二、设计实现


数据库中,增加 order 字段来标识排序,order_time 辅助排序。

数据库设计:

CREATE TABLE IF NOT EXISTS `app_basic` (
  `user_id` VARCHAR(32) NOT NULL COMMENT '用户 Id',
  `username` VARCHAR(64) NOT NULL COMMENT '用户名',
  `phone_number` VARCHAR(64) NOT NULL COMMENT '手机号',
  `order` INT NOT NULL DEFAULT 0 COMMENT '排序字段',
  `order_time` DATETIME NOT NULL DEFAULT current_timestamp COMMENT '排序时间',
  `create_time` DATETIME NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
  `modify_time` DATETIME NOT NULL DEFAULT current_timestamp ON UPDATE current_timestamp COMMENT '更新时间',
  PRIMARY KEY (user_id)
) ENGINE=InnoDB DEFAULT CHARSET utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT '用户表';

举个栗子

  1. 初始情况:

默认排序:order (降序DESC)、order_time (升序 ASC);order 均为 0,order_time 为插入时间

姓名手机号orderorder_time
滴滴+86-1344444444402020-11-03 9:45:15
啦啦+86-1344444444502020-11-04 10:05:09
哈哈+86-1344444444602020-11-05 11:25:01
嘻嘻+86-1344444444702020-11-06 12:13:40
  1. 情景1,“嘻嘻” 移动到 “哈哈” 之上

“嘻嘻”记录如何变化:order字段(order + 1),order_time 更新为当前时间(2020-11-07 12:00:11)

姓名手机号orderorder_time
滴滴+86-1344444444402020-11-03 9:45:15
啦啦+86-1344444444502020-11-04 10:05:09
嘻嘻+86-1344444444712020-11-07 12:00:11
哈哈+86-1344444444602020-11-05 11:25:01
  1. 这时候按照 orderorder_time 排序有问题。

解决方法:将原先 “哈哈” 之上的记录 order + 1,但不改变 order_time

展示如下:

姓名手机号orderorder_time
滴滴+86-1344444444412020-11-03 9:45:15
啦啦+86-1344444444512020-11-04 10:05:09
嘻嘻+86-1344444444712020-11-07 12:00:11
哈哈+86-1344444444602020-11-05 11:25:01


三、其他设计


还有一些其他方案:

  1. 全量排序,保证每个 order 均不同

    每次修改,前端需全量上传,每个记录的 order

    如图:

    姓名手机号order
    滴滴+86-134444444441
    啦啦+86-134444444452
    嘻嘻+86-134444444473
    哈哈+86-134444444464

    缺点:限制数量。

    需限定排序总数,比如 20 个以内能排序。


  1. 其他方案

    保证每个 order 不同

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值