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