mysql按单数标准的两列排序

mysql按单数标准的两列排序,mysql,sql,Mysql,Sql,我有一张桌子,上面有两个简单的柱子,就像这把小提琴一样 我谨此命令: id rev ========== 1 1 2 3 6 3 3 1 4 2 10 2 5 1 7 1 8 1 9 1 我希望order by具有列“id”,但如果“id”=2,则下一个必须是具有相同“rev”值的“id” 有可能吗 [编辑]对不起,我

我有一张桌子,上面有两个简单的柱子,就像这把小提琴一样

我谨此命令:

    id   rev
    ==========
    1     1
    2     3
    6     3
    3     1
    4     2
   10     2
    5     1
    7     1
    8     1
    9     1
我希望order by具有列“id”,但如果“id”=2,则下一个必须是具有相同“rev”值的“id”

有可能吗

[编辑]对不起,我修改了小提琴手

[编辑25/10] 当第一个表的id为“militare”时,我试图用@P.Salmon answer编辑我的查询。 但是有一个错误

1054-未知列“字段列表”中的“版本”
考虑到您的数据和您所说的内容,您的逻辑没有意义,我希望输出像这样

+----+-----+
| id | rev |
+----+-----+
|  1 |   1 |
|  3 |   1 |
|  5 |   1 |
|  7 |   1 |
|  8 |   1 |
|  9 |   1 |
|  2 |   3 |
|  6 |   3 |
|  4 |   2 |
| 10 |   2 |
+----+-----+
10 rows in set (0.03 sec)
或者,如果您将rev 1视为特例,您可以

select id,rev
        #case when rev = 1 then id 
        #else minid 
        #end  as overwrite
from
(
select id,rev,
         if(rev<>@p,@rn:=1,@rn:=@rn+1) rn,
         if(rev<>@p,@min:=id,@min:=@min) minid,
         @p:=rev p
from docs, (select @min:=0, @rn:=0,@p:=0) r
order by rev,id
) s
order by        case when rev = 1 then id 
        else minid 
        end  ,
            rn

这是什么逻辑?你能解释一下顺序吗?我看不到按顺序排列的规则!我想订购:-基于什么?如果您根本不解释这个订单应该基于什么,那么仅提供一个SQLFIDLE是没有帮助的。另外,小提琴中的rev列包含三个2,只有一个3。甚至id和rev之间的关联也不与预期示例输出中的关联相同…?你能根据给定值编写预期结果吗?请将预期输出以及你迄今为止尝试过的查询添加到你的问题中。如果我在这里提问,那只是因为我不能。我要订购“id”列,但要使用我的标准。我不明白是因为我的英语不安全还是什么…没有一个明确的规则来获得你想要的结果,你已经声明我想要带有“id”列的order by,但如果'id'=2,则下一个必须是'id',具有相同的'rev'值,但这似乎也适用于rev 1和rev 3,并且rev 1和rev 3没有明显的理由表现出与rev 2不同的行为。这不是对代码的评论,它纯粹是关于逻辑的。请参阅编辑,其中rev 1被视为特例。
select id,rev
        #case when rev = 1 then id 
        #else minid 
        #end  as overwrite
from
(
select id,rev,
         if(rev<>@p,@rn:=1,@rn:=@rn+1) rn,
         if(rev<>@p,@min:=id,@min:=@min) minid,
         @p:=rev p
from docs, (select @min:=0, @rn:=0,@p:=0) r
order by rev,id
) s
order by        case when rev = 1 then id 
        else minid 
        end  ,
            rn
+----+-----+
| id | rev |
+----+-----+
|  1 |   1 |
|  2 |   3 |
|  6 |   3 |
|  3 |   1 |
|  4 |   2 |
| 10 |   2 |
|  5 |   1 |
|  7 |   1 |
|  8 |   1 |
|  9 |   1 |
+----+-----+
10 rows in set (0.03 sec)