0

我有一个数据库,我不断地放置从服务中获得的新数据。这是在一个线程中工作的,所以每次我看到新数据时,我都会将 ii 放入数据库中。我只在我的应用程序中显示最新的 20 条新闻,而且效果很好。问题是我想从数据库中删除所有最旧的通知,并且只保留最新的 20 个。我不知道如何编写该查询。有什么帮助吗?

4

3 回答 3

2

根据 SQLite 的文档,您在“DELETE FROM”中同时具有 ORDER BY 和 LIMIT 支持。

http://www.sqlite.org/lang_delete.html

但是,我还没有尝试过,所以我不能说它是否适用于android下的SQLite。但是,什么有效(我过去做过)正在使用

DELETE FROM tableName 
WHERE myid IN (SELECT id FROM mytable ORDER BY id LIMIT -1 OFFSET 20); 
于 2012-12-10T10:49:18.870 回答
2

我喜欢@JustDanyul 的回答,但我认为IN在这种情况下您不需要该子句。看起来他正在使用 1 个表,所以你不能这样写查询吗?

DELETE FROM tableName ORDER BY id DESC LIMIT -1 OFFSET 20; 
于 2013-03-05T20:48:28.060 回答
0

好吧,最后我是来回答我自己的问题的:)

我做的事情是这样的:

if(fetchNotificationsCount() > 20){
        String sql = "SELECT * FROM (SELECT * FROM " + PPASQLiteHelper.TABLE_NOTIFICATIONS + " ORDER BY " + PPASQLiteHelper.COLUMN_ID + " DESC) LIMIT " + fetchNotificationsCount() + " OFFSET 20";
        Cursor cursor = database.rawQuery(sql, null);
        cursor.moveToFirst();
        while(!cursor.isAfterLast()){
            database.delete(PPASQLiteHelper.TABLE_NOTIFICATIONS, PPASQLiteHelper.COLUMN_ID + "=" + cursor.getLong(0), null);
            cursor.moveToNext();
        }
        cursor.close();
    }

有了 LIMIT 和 OFFSET,我就可以做我想做的事了。无论如何感谢您的帮助。

于 2012-12-10T10:38:44.040 回答