天天看点

【小设计】之 字段排序

文章目录

  • ​​一、需求​​
  • ​​二、设计实现​​
  • ​​三、其他设计​​

一、需求

需求:可以自定义排序

  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​

​ 为插入时间

姓名 手机号 order order_time
滴滴 +86-13444444444 2020-11-03 9:45:15
啦啦 +86-13444444445 2020-11-04 10:05:09
哈哈 +86-13444444446 2020-11-05 11:25:01
嘻嘻 +86-13444444447 2020-11-06 12:13:40
  1. 情景1,“嘻嘻” 移动到 “哈哈” 之上

“嘻嘻”记录如何变化:​

​order​

​​字段(​

​order​

​​ + 1),​

​order_time​

​ 更新为当前时间(2020-11-07 12:00:11)

姓名 手机号 order order_time
滴滴 +86-13444444444 2020-11-03 9:45:15
啦啦 +86-13444444445 2020-11-04 10:05:09
嘻嘻 +86-13444444447 1 2020-11-07 12:00:11
哈哈 +86-13444444446 2020-11-05 11:25:01
  1. 这时候按照​

    ​order​

    ​​、​

    ​order_time​

    ​ 排序有问题。

解决方法:将原先 “哈哈” 之上的记录 ​

​order + 1​

​​,但不改变 ​

​order_time​

展示如下:

姓名 手机号 order order_time
滴滴 +86-13444444444 1 2020-11-03 9:45:15
啦啦 +86-13444444445 1 2020-11-04 10:05:09
嘻嘻 +86-13444444447 1 2020-11-07 12:00:11
哈哈 +86-13444444446 2020-11-05 11:25:01

三、其他设计

还有一些其他方案:

  1. 全量排序,保证每个​

    ​order​

    ​ 均不同
每次修改,前端需全量上传,每个记录的 ​

​order​

  1. 如图:
姓名 手机号 order
滴滴 +86-13444444444 1
啦啦 +86-13444444445 2
嘻嘻 +86-13444444447 3
哈哈 +86-13444444446 4

缺点:限制数量。

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

  1. 其他方案