2013-06-05 142 views
3

这是一个简单的问题,但我一直在Google上搜索很长时间,但没有结果。按顺序指定顺序BY

SELECT * FROM `target` WHERE `week_id`=23 
and `ini_id`=2 
ORDER BY `region_id` 

当我订购这个查询时,它在ASC或DESC中。 我可以指定一个像(5,6,7,1,2,3,4)

region_id序列
+0

什么是(5,6,7,1,2,3,4)上?这只是一个随机顺序? – Learner

+2

不,但为了这个顺序,你可以使用'联合'或'(id +3)%8' – Kevin

回答

2

您应该能够FIND_IN_SET使用方法:基于

SELECT * 
FROM `target` 
WHERE `week_id`=23 
    and `ini_id`=2 
ORDER BY FIND_IN_SET(`region_id`, '5,6,7,1,2,3,4') 
+0

This works too! – user2300435

+0

注意:除1到7之外的任何值将在5之前排序。 – spencer7593

0

两种方法可以做到这一点:通过计算

你可以做

订单请按顺序排列,但使用计算的值,以便获得您想要的订单。

例如:

select * from data order by (region_id+5)%10; 

SQL小提琴:http://www.sqlfiddle.com/#!2/5f80da/2

使用联盟

(select * from data where region_id > 4) 
UNION 
(select * from data where region_id < 5) 

SQL小提琴:http://www.sqlfiddle.com/#!2/09fe1/1

1

不是直接的,没有,但你可以得到结果t使用表达式按照规范d排序,例如:

ORDER BY CASE WHEN region_id IN (5,6,7) THEN 1 ELSE 2 END, region_id 

CASE表达式从region_id派生一个值。因此,region_id为5,6或7的行被赋值为“1”,其他所有行被赋值为“2”。当我们按这个顺序排序时,所有的5,6,7个region_id排在第一位,然后是其他所有行。

下一步是按region_id进行排序。

4

您可以使用FIELD为:

SELECT * 
FROM `target` 
WHERE `week_id`= 23 
    and `ini_id`= 2 
ORDER BY FIELD(`region_id`,5,6,7,1,2,3,4) 
+0

谢谢你的作品 – user2300435

+0

@ user2300435 - np,很高兴我可以帮忙! – sgeddes

+1

注意:除1到7以外的任何值将在5之前排序。 – spencer7593