2014-06-26 2 views
0

У меня есть таблица с тремя столбцами «ID», «NAME» & «STATUS». Я хотел бы выполнить запрос в моей базе данных, где я могу получить только одну запись «ID», которая находится в верхней строке. У меня есть рабочий SQL-запрос,Сложные запросы с SQLite в Android

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

Это до сих пор, что я осуществил в андроида,

// 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; 
     } 

Al через него дает желаемый результат, но я хотел бы знать, если есть какие-либо другим способом сделать это более эффективно.

ответ

1

Вы можете использовать Limit

запроса общественного курсора (строка таблицы, String [] столбцы, выбор String, String [] selectionArgs, String группеПо, String, имеющий, String OrderBy, предел String)

limit - Ограничивает количество строк, возвращаемых запросом, отформатированное как предложение 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" }); 
Смежные вопросы