这是一个简单的问题,但我已经用谷歌搜索了很长时间,但没有结果。
SELECT * FROM `target` WHERE `week_id`=23
and `ini_id`=2
ORDER BY `region_id`
当我订购此查询时,它是 ASC 或 DESC。我可以为region_id
like (5,6,7,1,2,3,4)指定一个序列吗
这是一个简单的问题,但我已经用谷歌搜索了很长时间,但没有结果。
SELECT * FROM `target` WHERE `week_id`=23
and `ini_id`=2
ORDER BY `region_id`
当我订购此查询时,它是 ASC 或 DESC。我可以为region_id
like (5,6,7,1,2,3,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)
您应该能够使用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')
不直接,不,但您可以使用表达式按照规范 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 排序。
有两种方法可以做到这一点:
按计算排序
您可以按顺序进行排序,但要使用计算值,以便获得所需的顺序。
例如:
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)