Android-запрос SQLite для упорядочивания результатов по дням с использованием построителя запросов

В настоящее время я использую построитель запросов, чтобы извлечь все мои записи из моей базы данных, и в настоящее время они организованы по дням, однако я сортирую их в алфавитном порядке,

  public Cursor fetchAll() {

      return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_MODULECODE,
        KEY_DAY, KEY_TIME, KEY_DURATION, KEY_TYPE, KEY_ROOM},null, null, null, null,"Day");
   }    

После некоторого поиска в Google я знаю, что мне нужно заменить последний раздел настраиваемым порядком поиска. что-то вроде:

 select _id, busnum, 
    case cast (strftime('%w', servdate) as integer)
        when 0 then 'Sunday'
        when 1 then 'Monday'
        when 2 then 'Tuesday'
        when 3 then 'Wednesday'
        when 4 then 'Thursday'
         when 5 then 'Friday'
        else 'Saturday' end as servdayofweek
   from tb1
   where ...

   From:
   http://stackoverflow.com/questions/4319302/sqlite-return-as-day-of-week

до сих пор я не смог понять, как объединить их, и любая помощь в правильном направлении будет очень нежелательна.

Редактировать решение спасибо за помощь, которую я пошел с объявлением строки и ссылкой на нее в запросе для всех, кому нужно что-то простое, это мой окончательный код для него

public Cursor fetchAll() {
   String OrderBy ="case Day"+
      " when 'Monday' then 0 "+ 
      " when 'Tuesday' then 1"+
      " when 'Wednesday' then 2"+
      " when 'Thursday' then 3"+
      " when 'Friday' then 5"+
      " end";
 return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_MODULECODE,
        KEY_DAY, KEY_TIME, KEY_DURATION, KEY_TYPE, KEY_ROOM},null, null, null, null,OrderBy );
}    

person Chris    schedule 02.05.2012    source источник


Ответы (2)


Если ваши значения Day являются названиями дней, вам нужно что-то вроде этого:

order by case Day
        when 'Sunday' then 0
        when 'Monday' then 1
        when 'Tuesday' then 2
        ...
        when 'Saturday' then 6
    end

в SQL; имейте в виду, что вы можете передать SQL ORDER BY почти любое выражение. Аргумент orderBy для query может быть любым предложением SQL ORDER BY (без order by), поэтому вам нужна эта большая уродливая строка:

"case Day when 'Sunday' then 0 when 'Monday' then 1 ... when 'Saturday' then 6 end"

в качестве последнего аргумента query. Вам, конечно, придется правильно заполнить ....

person mu is too short    schedule 02.05.2012

Если вы не можете понять, как передать сложный запрос через SQLiteDatabase.query(... lots of variables...), просто передайте оператор select в виде строки с помощью SQLiteDatabase.rawQuery().

Например:

String query = "select _id, busnum, " +
               " case cast cast (strftime('%w', servdate) as integer) " +
               ...
String[] selectionArgs = new String() { yada, yada, yada }
mDb.rawQuery(query, selectionArgs);
person Sam    schedule 02.05.2012