簡體   English   中英

sqlite rawquery無法正常工作

[英]sqlite rawquery not working correctly

我有兩個表,它們的名稱分別是個人資料和消息。 我嘗試從SQL獲取與profileId相關的配置文件數據和最后一條消息。

型材

  • profileId(INTEGER)
  • profileName(TEXT)
  • profileImgPath(TEXT)

訊息

  • messageId(INTEGER)
  • profileId(INTEGER)
  • messageContent(INTEGER)
  • messageType(INTEGER)
  • messageStatus(INTEGER)
  • messageTime(TEXT)

資料范例

表內容

在此處輸入圖片說明

我的查詢

SQLiteDatabase db = this.getReadableDatabase();


     String selectQuery = "select " +
     "profiles.profileId," +
     "profiles.profileName," +
     "profiles.profileImgPath," +
     "profiles.profileStatus," +
     "messages.messageContent," +
     "messages.messageTime " +
     "from profiles left join messages on profiles.profileId=messages.profileId " +
     "group by profiles.profileId " +
     "order by messages.messageId DESC;";
          Cursor c = db.rawQuery(selectQuery, null);
    Log.i("query",selectQuery);
    if (c.moveToFirst()) {
        do {

            Log.i("gokberksql", c.getString(1) + "x" + c.getString(4));
            } while (c.moveToNext());
    }

結果

gokberksql﹕ sinanxKanka naber

但需要退貨

gokberksql﹕ sinanxIyi senden naber

另外,此查詢在我的計算機編輯器中運行良好,但android結果不正確。

您應該在查詢中選擇最大messageTime。 這將為您提供與包含最大值的列在同一行中的列的值。

String selectQuery = "select " +
    "profiles.profileId," +
    "profiles.profileName," +
    "profiles.profileImgPath," +
    "profiles.profileStatus," +
    "messages.messageContent," +
    "max(messages.messageTime) as messageTime " + // <- here
    "from profiles " +
    "left join messages on profiles.profileId = messages.profileId " +
    "group by profiles.profileId" +
    "order by profiles.profileId, messages.messageId DESC;";

請注意,此行為是在SQLite 3.7.11版中引入的,該版本在API 16(JellyBean)中成為標准。 如果需要支持API 15或更早版本,則可能必須使用其他查詢。

為什么要有一個由profiles.profileId組成的組,在這種情況下就不需要了,因為您沒有對profileId組進行任何聚合。 試試看

String selectQuery = "select " +
   "profiles.profileId," +
   "profiles.profileName," +
   "profiles.profileImgPath," +
   "profiles.profileStatus," +
   "messages.messageContent," +
   "messages.messageTime " +
 "from profiles left join messages on   profiles.profileId=messages.profileId " +
   "order by profiles.profileId, messages.messageId DESC;";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM