1

Androidアプリケーションでdeleteステートメントをまとめるのに問題があります(OrmLiteを使用しています)。

レコードでいっぱいのテーブルがあります。フィールドの2つは、「dateCreated」(type Date)と「imageSize」(type int)です。私のコードにはメソッドがありfree(int size)ます。このメソッドは、「imageSize」<=サイズを合計した最も古いレコードをテーブルから削除する必要があることを示しています。

たとえば、..パラメータ1000を取得します。各レコードには100などの値があります。つまり、最も古いレコードを10個削除する必要があります。

誰かが私に最適な生のSQLステートメントまたはこれのためのさらに良いOrmLiteコードを提供してくれますか?

私は最も感謝します。

4

2 に答える 2

1

残念ながら、単一のSQLステートメントでこれを行うことはできません。言う方法はありません

合計がX未満になるまでレコードを選択します

合計がX未満の最も古いレコードが見つかるまで複数のクエリを実行できますが、複数の個別のSQL呼び出しが必要になります。

最後のX枚の画像とそのサイズを選択してから、を使用して適切な数の画像を削除することをお勧めしDELETE ... IN ...ます。擬似コードは次のとおりです。

while (true) {
   SELECT id, imageSize FROM yourtable ORDER BY dateCreated DESC LIMIT 10;
   find the images from the bottom whose sum(imageSize) <= parameter
   delete the found images
   break if you exceed the parameter otherwise loop and get the next 10
}
于 2011-07-07T21:39:31.167 に答える
0

これを試して、

DELETE FROM yourtable WHERE imageSize <= (SELECT SUM(ImageSize) FROM yourtable)

関数に同じパラメーターを使用します

于 2011-07-06T11:03:11.853 に答える