2011-01-10 80 views
3

有沒有辦法在sqlite中查詢自定義順序?在sqlite中自定義排序

例如,我基本上是一個枚舉

 
_id|Name|Key 
------------ 
1 | One | Named 
2 | Two | Contributing 
3 | Three | Named 
4 | Four | Key 
5 | Five | Key 
6 | Six | Contributing 
7 | Seven | Named 

和「關鍵」列有順序。說鍵>命名>貢獻。

有沒有一種方法,使

SELECT * FROM table ORDER BY Key

回報的東西的

 
_id|Name|Key 
------------ 
4 | Four | Key 
5 | Five | Key 
1 | One | Named 
3 | Three | Named 
7 | Seven | Named 
2 | Two | Contributing 
6 | Six | Contributing 

這個效果?

+0

的可能的複製[SQLite和由客戶訂單(https://stackoverflow.com/questions/3303851/sqlite-and-custom-順序) – 2017-11-18 17:32:14

回答

9
SELECT _id, Name, Key 
    FROM my_table t 
ORDER BY CASE WHEN key = 'Key' THEN 0 
       WHEN key = 'Named' THEN 1 
       WHEN key = 'Contributing' THEN 2 END, id; 
2

如果您有很多CASE(或複雜的條件),Adam的解決方案可能會導致一個非常大的查詢。

SQLite允許你編寫自己的函數(用C++)。你可以編寫一個函數來返回與Adam相似的值,但是因爲你使用的是C++,你可以使用更多的條件(或者單獨的表格等)。

一旦函數編寫,你可以參考它在你的選擇,就好像它是一個內置功能:

SELECT * FROM my_table的ORDER BY MyOrder(密鑰)

+0

這實際上是在Android上。你知道這對於android來說可能嗎? – Falmarri 2011-01-18 16:41:36

0

你有沒有嘗試(未測試在我的一邊,但依賴於技術我先前使用的):

ORDER BY KEY = "Key" DESC, 
     KEY = "Named" DESC, 
     KEY = "Contributing" DESC