天天看點

【小設計】之 字段排序

文章目錄

  • ​​一、需求​​
  • ​​二、設計實作​​
  • ​​三、其他設計​​

一、需求

需求:可以自定義排序

  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. 其他方案