我在 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/

10-13 05:45
查看更多