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)