我有一个数据库,我不断地从服务中获取新数据。这是在一个线程中工作,因此每当我看到新数据时,我将ii放入数据库中。我只是在我的应用程序中显示最新鲜的20个新闻,这是完美的。问题是我想从数据库中删除所有最旧的通知,并且只保留最新鲜的20个通知。我不知道如何编写该查询。有什么帮助吗?
答案 0 :(得分: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);
答案 1 :(得分:2)
我喜欢@ JustDanyul的答案,但在这种情况下我认为你不需要IN
条款。看起来他正在使用1个表,所以你不能这样写这个查询吗?
DELETE FROM tableName ORDER BY id DESC LIMIT -1 OFFSET 20;
答案 2 :(得分: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,我能够按照我的意图行事。无论如何,谢谢你的帮助。