Небольшая помощь в составлении оператора delete в SqlLite с использованием OrmLite - PullRequest
1 голос
/ 06 июля 2011

У меня проблемы с составлением инструкции удаления в моем приложении Android (я использую OrmLite).

У меня есть таблица, заполненная записями.Два поля - это dateCreated (type Date) и imageSize (type int).В моем коде у меня есть метод free(int size).Этот метод говорит мне, что я должен удалить самые старые записи из моей таблицы, которые имеют размер "imageSize" <= size.

Например. Я получаю параметр 1000. Каждая запись имеет значение, скажем, 100. Это означает, что янужно удалить 10 самых старых записей.

Может, кто-нибудь предоставит мне оптимальный необработанный оператор SQL или, что еще лучше, код OrmLite для этого?

Я был бы очень признателен.

Ответы [ 2 ]

1 голос
/ 08 июля 2011

К сожалению, вы не можете сделать это с помощью одного оператора 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
}
0 голосов
/ 06 июля 2011

попробуйте это,

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

Используйте тот же параметр для вашей функции

...