2011-07-06 46 views
1

我在我的Android應用程序(我正在使用OrmLite)中放置刪除語句時遇到了麻煩。在SqlLite中使用OrmLite將刪除語句放在一起的幫助很少

我有一張桌子,裏面裝滿了記錄。其中兩個字段爲「dateCreated」(type Date)和「imageSize」(type int)。在我的代碼中,我有一個方法free(int size)。這種方法告訴我,我必須從我的表中刪除最大的記錄,總和「imageSize」<=大小。

例如..我得到參數1000.每個記錄有值可以說100.這意味着我必須刪除10個最古老的記錄。

有人能爲我提供最佳的原始SQL語句,甚至更好的OrmLite代碼嗎?

我會是最gratefull。

+0

因此,如果每個圖像的大小爲100,你說免費(1000),那麼所有的圖像將匹配,對不對? 10進來了哪裏?這是一個常數? – Gray

+0

對我的答案@ no9的任何反饋? – Gray

+0

抱歉,格雷我還沒有收到有關此安裝程序的通知。是的,這是一個錯字。 – no9

回答

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 
} 
+0

這可能會伎倆,我已經實現了類似的東西,它是耗費大量資源,將使用此解決方案 – no9

0

試試這個,

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

使用您的功能相同的參數

+0

你不明白我的問題。我需要刪除最舊的記錄,他們的SUM(圖像大小)是<=「大小」 – no9

+0

@ no9我已更新查詢,希望這是您需要的查詢 – sudheshna