比方說,我有查詢數據庫與where子句SQL WHERE IN(...)按列表的順序排序?
WHERE _id IN (5,6,424,2)
有沒有辦法爲返回的光標是在排序的_id的地方在列表中列出? Cursor中第一個到最後一個的_id屬性分別爲5,6,424,2?
這恰好在Android上通過ContentProvider,但這可能不相關。
比方說,我有查詢數據庫與where子句SQL WHERE IN(...)按列表的順序排序?
WHERE _id IN (5,6,424,2)
有沒有辦法爲返回的光標是在排序的_id的地方在列表中列出? Cursor中第一個到最後一個的_id屬性分別爲5,6,424,2?
這恰好在Android上通過ContentProvider,但這可能不相關。
選擇ID列表使用子查詢,並與它連接:
select t1.*
from t1
inner join
(
select 1 as id, 1 as num
union all select 5, 2
union all select 3, 3
) ids on t1.id = ids.id
order by ids.num
UPD:代碼固定
一種方法可能是在每個SQL查詢與UNION之間執行單獨的SQL查詢。您顯然會按照您希望返回給您的順序發出每個查詢。
... 爲了通過
情況下,當_id = 5然後1
時_id = 6,然後2
端
等
你可以把它加入到包含在排序順序
select tbl.*
from tbl
inner join (
select 1 as sorter, 5 as value union all
select 2, 6 union all
select 3, 424 union all
select 4, 2) X on tbl._id = X.value
ORDER BY X.sorter
列表中選擇所需列表中的虛擬表?你沒有清單! )
此:
WHERE _id IN (5,6,424,2)
僅僅是語法糖爲這樣:
WHERE (
_id = 5
OR _id = 6
OR _id = 424
OR _id = 2
)
SQL有但是一個數據結構,在工作臺。您的(5,6,424,2)
也不是一張表! :)
您可以創建一個值的表,但您的下一個問題是表沒有任何邏輯順序。因此,根據@ cyberkiwi的回答,你必須明確地創建一個列來爲排序順序建模。爲了使其對調用應用程序顯式明確,請確保在查詢的SELECT
子句中公開此列。
我認爲你需要在你的內部表中的2列。該ID與您擁有的一樣,還有一個序列列。然後按順序排序。 – lll 2011-02-01 06:20:20
哎呀..是的,當然。這是我的錯誤類型。 – oryol 2011-02-01 08:50:02