2011-05-02 21 views
1

我知道可以像報表選擇下一首或上X記錄如下:SQLite的:根據ORDER語句選擇繞行X記錄有一定的ID

Next:  `SELECT * FROM table WHERE some_key > 3 ORDER BY some_key ASC LIMIT X` 
Previous: `SELECT * FROM table WHERE some_key < 3 ORDER BY some_key DESC LIMIT X` 

但是我的語言我工作它在結果上返回一個Cursor,我想把所有的結果都放在一個遊標中。

是否可以在單個SQL語句中選擇當前記錄以及X下一個和前一個記錄?

回答

1

最後,我使用的答案從@mu,有一些修改

在Android中,你不能在UNION的整套使用內ORDER BY語句,只是一個單一的外ORDER BY。爲了解決這個問題我用的事實,SQLite的Android上不支持內查詢,執行在內部查詢每個實際進行選擇,然後選擇從內部查詢到工會的所有行,如下所示:

SELECT * FROM (SELECT * FROM table WHERE some_key > 3 ORDER BY some_key ASC LIMIT X) 
UNION 
SELECT * FROM table WHERE some_key = 3 
UNION 
SELECT * FROM (SELECT * FROM table WHERE some_key < 3 ORDER BY some_key DESC LIMIT X) 
1

你可以嘗試使用UNION:

SELECT * FROM table WHERE some_key > 3 ORDER BY some_key ASC LIMIT X 
UNION 
SELECT * FROM table WHERE some_key = 3 
UNION 
SELECT * FROM table WHERE some_key < 3 ORDER BY some_key DESC LIMIT X 

您可能需要修復了工會之外的排序,但上述會給你身邊some_key = 3的窗口,你要找的,它會處理乾淨在some_key值中存在差距。

+0

感謝它讓我在正確的道路上 - 遺憾的是Android在執行'UNION'時只支持一個外部的'ORDER BY'子句。 – 2011-05-09 13:05:47