场景
一般数据排序选择 id, created_at 等,特别在意顺序时就要使用排序字段,我们这里使用 rank 字段。
常规做法
当然是把 rank 字段设成 int 型,这样做正向反向查询都没有问题。有问题是修改顺序时,无法调整某条记录的顺序。
varchar 排序
这时想到 varchar 排序是不是可以灵活一些
select * from unit order by rank
| rank |
|---|
| 1 |
| 10 |
| 100 |
| 2 |
| 3 |
| 4 |
| 6 |
| 7 |
| 8 |
| 9 |
如果想要数字大小排序可以这样
select * from unit order by rank+0
| rank |
|---|
| 1 |
| 2 |
| 3 |
| 4 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 100 |
重点来了,如何才能改变某条记录到特定位置呢?如 7 到 3 后面,答案是把 7 改成 3a。
select * from unit order by rank+0
| rank |
|---|
| 1 |
| 2 |
| 3 |
| 3a |
| 4 |
| 6 |
| 8 |
| 9 |
| 10 |
| 100 |
就是这样了








网友评论