2010-05-08 67 views

回答

6

我认为最简单的方法是做这样的:

SELECT * FROM `mytable` ORDER BY FIND_IN_SET(id, '2,3,1') 
+0

这正是我正在寻找的。谢谢! – 2010-05-09 20:21:46

+0

+1,非常优雅! – Heinzi 2010-05-10 15:10:39

1

您可以添加与值的虚拟列将

MOD(ID, 3) 

,并通过其订购您的查询上升。例如:

SELECT somecolumn, MOD(ID, 3) AS ordered_id FROM my_table ORDER BY ordered_id 
+0

这绝对有效,但它不应该如果表中有3个以上的ID,这个查询必须手动更改(这不是最大的交易,但我的纯粹主义者正在努力,哈!)。 – ABach 2010-05-08 18:37:41

+0

嗯......为什么这个工作? 2/3/1 MOD 3导致2/0/1。你不需要使用MOD(ID + 1,3)吗? – Heinzi 2010-05-08 18:40:48

+0

它可能工作,但这是一个非常糟糕的解决方案,因为完整表的MOD()必须在从中选择一些行之前进行计算。 – Sebastian 2015-01-19 09:07:15

0

未经测试:

SELECT ..., IF(ID=2, 1, IF(ID=3, 2, 3)) AS orderByValue 
    FROM ... 
ORDER BY orderByValue 

它使用IF function转换ID值:

ID  orderByValue 
    2  1 
    3  2 
else  3