0

私は、サービスから取得した新しいデータを常に入れているデータベースを持っています。これはスレッドで機能しているので、新しいデータを見るたびに、データベースにiiを入れます。私は自分のアプリで最新の20のニュースのみを表示していますが、それは完全に機能しています。問題は、データベースから最も古い通知をすべて削除したいのですが、最新の20個だけが残っているということです。そのクエリの書き方がわかりません。何か助けはありますか?

4

3 に答える 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 に答える