這是一個簡單的問題,但我一直在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
序列
這是一個簡單的問題,但我一直在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
序列
您應該能夠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')
This works too! – user2300435
注意:除1到7之外的任何值將在5之前排序。 – spencer7593
兩種方法可以做到這一點:通過計算
你可以做
訂單請按順序排列,但使用計算的值,以便獲得您想要的訂單。
例如:
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)
不是直接的,沒有,但你可以得到結果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進行排序。
您可以使用FIELD
爲:
SELECT *
FROM `target`
WHERE `week_id`= 23
and `ini_id`= 2
ORDER BY FIELD(`region_id`,5,6,7,1,2,3,4)
謝謝你的作品 – user2300435
@ user2300435 - np,很高興我可以幫忙! – sgeddes
注意:除1到7以外的任何值將在5之前排序。 – spencer7593
什麼是(5,6,7,1,2,3,4)上?這只是一個隨機順序? – Learner
不,但爲了這個順序,你可以使用'聯合'或'(id +3)%8' – Kevin