基于Mysql 根据输入值 为基础的 环形排序

前提

有表Table,有数据如下,其中 字段index 的长度未知:

index data
1 bulabula
5 bulabula
11 bulabula
35 bulabula
71 bulabula
95 bulabula
96 bulabula

需求

随机生成一个数,然后以这个数【不含这个数】开始,进行正序逆序排序 并分页
例如:

 // 当: 现在命中了 生成数为 100,每页取 3条
 正序:第一页: 1->5->11 第二页: 35->71->95 第三页 96
 逆序:第一页: 96->95->71 第二页: 35->11->5 第三页 1

正序全列:

1 5 11 35 71 95 96
逆序全列:
96 95 71 35 11 5 1
------------ ------------ ------------ ------------ ------------ ------------ ------------
 // 当: 现在命中了 生成数为 50,每页取 3条
 正序:第一页: 71->95->96 第二页: 1->5->11 第三页 35
 逆序:第一页: 35->11->5 第二页: 1->96->95 第三页 71

正序全列:

71 95 96 1 5 11 35
逆序全列:
35 11 5 1 96 95 71
------------ ------------ ------------ ------------ ------------ ------------ ------------
 // 当: 现在命中了 生成数为 35,每页取 3条
 正序:第一页: 71->95->96 第二页: 1->5->11 第三页 35
 逆序:第一页: 11->5->1 第二页: 96->95->71 第三页  35

正序全列:

71 95 96 1 5 11 35
逆序全列:
11 5 1 96 95 71 35
------------ ------------ ------------ ------------ ------------ ------------ ------------

答案

# 正序
SELECT `index` FROM `Table`  order by FIELD( SIGN(`index`-要命中的数),1,-1,0),  `index`;
# 逆序
SELECT `index` FROM `Table`  order by FIELD( SIGN(`index`-要命中的数),-1,1,0),  `index` desc ;

思路

基于mysql 百度一下 这俩函数 啥概念 就解决了。

posted @ 2021-07-09 16:02  空明师兄  阅读(49)  评论(0编辑  收藏  举报