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

浙公网安备 33010602011771号