2014-06-26 60 views
0

我有一個3列「ID」,「名稱」&「狀態」的表。我想對我的數據庫執行一個查詢,在那裏我只能得到一個位於最上面一行的「ID」條目。我有一個工作的SQL查詢,Android中的SQLite的複雜查詢

"SELECT TOP 1 ID from SAMPLE_TABLE WHERE Status='PENDING' ORDER BY ID ASC;"

這是迄今爲止我在Android的實施,

// Getting pending items 
     public int pendingContact() { 
      SQLiteDatabase db = this.getWritableDatabase(); 
      Cursor mCount = db.query(
        TABLE_CONTACTS , 
        new String[] { "id" } , 
        "status = ?" , 
        new String[] { "PENDING" } , 
        null , 
        null , 
        null 
       ); 

      mCount.moveToFirst(); 
      int count = mCount.getInt(0); 
      mCount.close(); 

      return count; 
     } 

鋁通過它得到所需的輸出,但我想知道是否有任何其他方式更有效地做到這一點。

回答

1

您可以使用Limit

公共光標查詢(字符串表,字符串[]列,字符串選擇的String [] selectionArgs兩個,字符串GROUPBY,有字符串,字符串的OrderBy,字符串限制)

限制 - 限制查詢返回的行數,格式爲LIMIT子句。傳遞null表示沒有LIMIT子句。

你可以這樣做:

Cursor mCount = db.query(TABLE_CONTACTS, new String[] { "id" }, "status = ?", new String[] { "PENDING" }, null, null, "id ASC", "1");

這將讓你比你需要獲取更多的數據。

+0

而'orderBy'? –

+0

工作查詢確實如此。沒有排序,結果將是隨機的。 –

+0

有ORDER BY ID ASC。 –

0

當您使用ORDER BY時,數據庫將讀取並對所有PENDING項進行排序,然後它可以返回第一個項目。

當使用MIN,不過是最小的值必須臨時存儲:

SELECT MIN(id) FROM Contacts WHERE Status = 'PENDING' 

在代碼:

Cursor mCount = db.rawQuery("SELECT MIN(id) FROM Contacts WHERE Status = ?", 
          new String[] { "PENDING" });