我在 MySQL 中有一个这样的表:
+-----+------+
| id | type |
+-----+------+
| 149 | 8 |
| 150 | 7 |
| 151 | 8 |
| 152 | 7 |
| 153 | 5 |
| 154 | 6 |
| 155 | 3 |
| 156 | 2 |
| 157 | 4 |
| 158 | 2 |
| 159 | 1 |
| 160 | 0 |
+-----+------+
我想对此表进行排序并收到如下结果:
+-----+------+
| id | type |
+-----+------+
| 151 | 8 |
| 152 | 7 |
| 154 | 6 |
| 153 | 5 |
| 157 | 4 |
| 155 | 3 |
| 158 | 2 |
| 159 | 1 |
| 160 | 0 |
| 149 | 8 |
| 150 | 7 |
| 156 | 2 |
+-----+------+
作为进一步的解释,我想对类型列进行排序,就像这样继续倒计时:
8,7,6,5,4,3,2,1,0,8,7,6,5,4,3,2,1,0,8,7,...
是否可以像这样对表格进行排序?或通过程序或其他方式实现该结果?
最佳答案
SELECT id, TYPE FROM (
SELECT id, TYPE,
IF(@myvar = 0 OR @myvar = TYPE, @counter := @counter + 1, @counter := 1) sequence,
@myvar := TYPE FROM mytable
JOIN (SELECT @myvar := 0, @counter := 0 ) a
ORDER BY TYPE DESC, id) b
ORDER BY sequence, TYPE DESC, id
此查询适用于任何级别。
如有必要,请放置外部查询以仅获取相关字段。
checkout 这个 SqlFiddle
关于mysql 高级按查询排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31324071/