java链表实现列表数据上移下移_在有序数据表中实现多记录上移下移置顶置底算法思路...

引言数据库应用中常需要在一个有序数据子集中,对指定的若干条记录进行上下移动。例如,管理员需要对新闻列表中的若干条新闻置顶,考试出卷时需要对选定题目进行上下移动重排顺序,等等。总的应该场景在数据表中可以概括为如下模型:数据表 TblData(id,fid,rank),id表示记录的唯一标识,fid指记录的父节点,rank代表父节点下兄弟的前后顺序,依次从1递增,没有空隙。问题是要对相同fid下选中的...
摘要由CSDN通过智能技术生成

引言

数据库应用中常需要在一个有序数据子集中,对指定的若干条记录进行上下移动。例如,管理员需要对新闻列表中的若干条新闻置顶,考试出卷时需要对选定题目进行上下移动重排顺序,等等。

总的应该场景在数据表中可以概括为如下模型:

数据表 TblData(id,fid,rank),id表示记录的唯一标识,fid指记录的父节点,rank代表父节点下兄弟的前后顺序,依次从1递增,没有空隙。

问题是要对相同fid下选中的若干个节点进行上下移动,如图1中的2个示例:

d0cfa03a3e20de28e206395c656f46af.png

图 1 上移操作示例图

左侧示例是对第5、6两个连续的记录上移,右侧示例是对第4和6个有间隔的记录上移。上移后,要移动的记录间的间隔保持不变。现实中,选中记录的位置和数量都是随机的,移动方向有“上移”1位,“下移”1位,“置顶”和“置底”。该需求进入存储过程的参数可归结为  PROCEDURE Reorder(OUT out_errno INT, IN in_ids TEXT, IN in_n INT UNSIGNED, IN in_direction),其中,out_errno 用于返回状态码,in_ids 是要移动的多个 id,以“,”分隔;in_n 是要移动的 id 数量;in_direction 是移动方向,取值是"up","down","top","bottom"。

上移操作

以块为单位的上移

以向上移动(上移或置顶)为例(如图2所示),将连续的记录看作一个块,按升序依次对各块进行上移操作。示例中有3个块,因此需要移动3次。

4d43180578470817922913eea10a037c.png

图2 上移操作块示意图

特定块的上移

对具体的块的移动,需要确定移动的步长(step)和块中的记录数(size)。通过第1块可以确定移动的步长,并且该步长对所有块都适用,即,所有块移动的步长都和第1块相同。图2中,如果进行“上移”&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值