数据向前插入排队,怎么设计表比较好?

问题描述

所有人只排一条队,可向前多个插入

1. 第1车队50人来了,先排队等候,不上车 顺序:1~50
2. 第2车队50人接着也来,跟在第1车队后面等候,51~101
3. 第3车队30人来了,因为是特殊队伍,要优先上车

问题出现的环境背景及自己尝试过哪些方法

怎么设计让1,2车队的让的位置靠后让第3车队让先上车呢?

我现在想法:

* 1,2车队序号都+30,相当于每个人靠后都后退30个的位置来,但这样后期操作到的数据太多
* 第3车队的序号从 -30 ~0,这样感觉也不是很理?

上面只是举例,可能还有第4车队,比第3车队优先及更高,或者过程中那个人肚子痛上厕所了,就要重新从最后面开始排了

相关代码

粘贴代码文本(请勿用截图)

你期待的结果是什么?实际看到的错误信息又是什么?

合理的设计排序索引,可向前多个插入

阅读 3.1k
5 个回答
CREATE TABLE `sort` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
  `uid` int(11) NOT NULL COMMENT 'UID',
  `status` tinyint(255) NOT NULL DEFAULT '' COMMENT '位置状态:1正常,2放弃',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `sort` (`sort`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
SELECT * FROM `sort` WHERE `status` = 0 ORDER BY `sort` DESC `id` ASC

强行加入的以更大的 sort,只要控制sort保持最大即可

用权重呗,加个权重字段 操控权重就行了

初步认为,有优先级的车队应该是占少数,为了不让更多的数据进行不断的更新影响效率,那么就得让少数有优先级的数据更新.
所以,可以维护两个字段,一个通用的排序字段,一个代表优先级的字段,当有优先级的车队来的时候就更新优先级字段即可

你可以用设计两张表,一张普通表,另外一张优先表,当优先没数据时,正常处理普通表,当优先表有数据时,优先处理优先表数据,而且理论上这种业务场景不会用数据库实现,会使用redis用两个队列实现

加一个优先级字段。优先级一样用主键排序。desc sort, id 结果类似这样

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题