2011-04-19 46 views
2

我有一個Android應用程序正在使用SQLite數據庫來確定是否作出某些'成就'。我需要一個查詢,如果每個'season'包含在一列中,將返回4的遊標長度。多個選項SQLite查詢幫助

所以,如果我執行查詢上一列「_id」如下:

_id: 

yada 
Autumn 
yada 
Summer 
Summertime 
yada 
yada 
Winter 
Spring 

它將返回4行(由此表明成就「四季」將實現光標

這是甚至可能與一個查詢,或者我將不得不完成與應用程序中的多個遊標和代碼?我想使用LIKE,因爲並非所有條目將完全相同的文本(即夏季或夏季,但兩者應該有資格)

回答

1

你應該能夠在查詢的where子句中使用and,like或or括號來實現。喜歡的東西...

Cursor mC = mDb.query("season", null, "_id like '%summmer%' and " 
    + "_id like '%winter%' and " 
    + "_id like '%spring%' and " 
    + "(_id like '%fall%' or _id like '%autumn%')", 
    null, null, null, null); 

在此之後,你可以有類似...

String [] seasons = new String[] {"spring", "summer", "fall", "autumn", "winter"); 
boolean fallExists = false; 
int seasonCount = 0; 

for(int i = 0; i < 5; ++i){ 
    if(i == 3 && fallExists) continue; 
    mC.moveToFirst(); 
    do{ 
     if(mC.getString(ID_COLUMN).toLowerCase().contains(seasons[i])){ 
      seasonCount++; 
      if(i == 2) fallExists = true; 
     } 
    } while ((mC.moveToNext())); 
} 

if(seasonCount == 4){ 
    //have a party 
} 
+0

這實現了我的目標的一部分,它返回一個包含四季行。但是,從我的示例中,它將返回夏令時和夏令時兩行,光標中總共有五行。我需要以某種方式將結果分組,以便每個季節只有一個記錄被返回,而不管包含給定季節的記錄數量。 – kittka 2011-04-19 21:48:39

+0

我只是自己學習SQLite ......但從我能想到的...我不相信這是可能的。返回此行,但停止返回等於查詢的子部分的行......聽起來不可能,但具有更好的SQL知識的人應該插入。我個人要做的是檢查行數,如果它是4或更大,則對結果運行一些其他限定代碼。不應該太難以循環他們,並檢測是否至少有一個季節存在。如果有兩個「薩默斯」,你甚至可以得到4個結果,所以我認爲必須完成一些資格。 – Maximus 2011-04-19 22:45:16