场景
一般数据排序选择 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 |
就是这样了