按顺序指定顺序BY

时间:2013-06-05 22:52:26

标签: mysql

这是一个简单的问题,但我一直在谷歌搜索很长时间,但没有结果。

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

当我订购此查询时,它位于ASC或DESC中。 我可以为region_id指定序列,如(5,6,7,1,2,3,4)

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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')

答案 2 :(得分:1)

不是直接,不是,但您可以使用表达式按照规范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排序。

答案 3 :(得分: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