SQLite:根据ORDER语句选择具有特定ID的行周围的X记录

时间:2011-05-02 03:36:14

标签: android sql sqlite cursor range

我知道可以使用如下语句选择下一个或上一个X记录:

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 next和previous记录?

2 个答案:

答案 0 :(得分: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值中的差距。

答案 1 :(得分:1)

最后,我使用了@mu的答案,进行了一些修改

在Android中,您无法在ORDER BY中使用内部UNION语句,只能在整个集合中使用单个外部ORDER BY。为了解决这个问题,我使用了Android上的SQLite支持内部查询,在内部查询中执行每个实际选择,然后从内部查询中选择所有行到union的事实,如下所示:

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)