私は、サービスから取得した新しいデータを常に入れているデータベースを持っています。これはスレッドで機能しているので、新しいデータを見るたびに、データベースにiiを入れます。私は自分のアプリで最新の20のニュースのみを表示していますが、それは完全に機能しています。問題は、データベースから最も古い通知をすべて削除したいのですが、最新の20個だけが残っているということです。そのクエリの書き方がわかりません。何か助けはありますか?
1784 次
3 に答える
2
SQLiteのドキュメントによると、「DELETEFROM」ではORDERBYと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 に答える