繁体   English   中英

如何从sqlite android获取特定数量的记录

[英]How to get particular amount of records from sqlite android

在我的应用中,sqlite中有很多记录(假设有100条记录)。 我想要从数据库中获取最后50条记录。 我为此使用下面的代码。

String [] projection = new String[]{
            ID, MESSAGE_ID, MESSAGE_TYPE, MESSAGE_MEDIA_STATUS, MESSAGE_BODY, MESSAGE_MEDIA_REFERENCE,
            MESSAGE_MEDIA_TYPE, MESSAGE_MEDIA_SIZE, MESSAGE_SENDER_ID, MESSAGE_RECIPIENT_ID,
            MESSAGE_DIRECTION, MESSAGE_STATUS, MESSAGE_LOCAL_STATUS, MESSAGE_TIMESTAMP};
    String selection = MESSAGE_SENDER_ID + "=?" + " AND " + MESSAGE_RECIPIENT_ID + "=?" + " OR " + MESSAGE_SENDER_ID + "=?" + " AND " + MESSAGE_RECIPIENT_ID + "=?";
    String [] selectionArgs = new String[]{String.valueOf(senderId), String.valueOf(recipientId), String.valueOf(recipientId), String.valueOf(senderId)};
    String orderBy = ID + " DESC";
    String limit = "50";
    Cursor cursor = null;
    try {
        cursor = sqLiteDatabase.query(TABLE_MESSAGES, projection, selection, selectionArgs, null, null, orderBy, limit);

        if (cursor.moveToFirst()) {
    //cursor reading stuff
    }

提到的代码正在按我的预期工作。 它获取最后50条记录,但问题是,它按desc顺序获取最后50条记录。 假设我已按顺序记录了1到100个数字。 我的代码首先更改其顺序(因为查询具有desc子句),这意味着记录将按100到1的顺序排列,而“ limit 50”子句将获取前50条记录。 现在这是一个问题,现在我的记录将是100,99,98 ,,,最后一条记录将是51,但是我希望我的记录按asc顺序排列,因为它最初是在DB中的asc中(记录应取为51,52直到100)。 我也有一些解决方案。 我知道我可以从java比较器中进行排序。我的问题是否有解决此问题的更好方法?或者可以解决相同问题而不是获取数据并填充排序后的任何sqlite查询。

您必须对LIMIT使用一种排序方式,对结果使用另一种排序方式。 因此,您需要一个子查询:

SELECT ...
FROM (SELECT ...
      ...
      ORDER BY ID DESC
      LIMIT 50)
ORDER BY ID;

为了能够执行此操作,必须改为使用rawQuery()

select * from (select [COLUMN_NAME] from [TABLE_NAME] order by ID DESC limit 50) order by ID ASC;

内部选择查询将选择最后 50条记录,因此排序顺序为DESC 外部选择查询将选择内部选择查询的所有记录,并以升序对其进行排序,因此需要ASC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM