3

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

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

当我订购此查询时,它是 ASC 或 DESC。我可以为region_idlike (5,6,7,1,2,3,4)指定一个序列吗

4

4 回答 4

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)
于 2013-06-05T22:56:06.760 回答
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')
于 2013-06-05T22:57:18.117 回答
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 排序。

于 2013-06-05T22:55:18.883 回答
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

于 2013-06-05T22:55:07.800 回答