前提
有表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 百度一下 这俩函数 啥概念 就解决了。