首页 > 解决方案 > 获取具有不同 where 子句和顺序的所有字段

问题描述

我正在为我的 android 应用程序实现一个信使功能,并将每个接收和发送的消息保存在以下 sqlite 模式中:

CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
`message_id` TEXT, 
`sentTimestamp` INTEGER NOT NULL, 
`senderUserID` TEXT, 
`senderUsername` TEXT, 
`senderProfilePictureUrl` TEXT, 
`receiverUserID` TEXT, 
`receiverUsername` TEXT, 
`message` TEXT)

现在我想对我所有的聊天(比如在 WhatsApp 中)和接收或发送的最后一条消息有一个概述。我需要所有字段(SELECT *)。问题是每个聊天伙伴只能出现一次,如果我是最后一个发件人,我的最后一条消息应该出现在列表中。

例子:

  1. 用户其他发送“你好吗?” 用户
  2. 用户me向用户other发送“我很好” 。

预期结果:

+----------+-------------+
|    User  |  Message    |
+----------+-------------+
| other    | I am good   |
+----------+-------------+




这是我到目前为止所拥有的

SELECT * FROM "+MESSAGE_TABLE+" 
GROUP BY senderUserID, receiverUserID 
ORDER BY id DESC

但结果如下所示:

+--------------+----------------+
|    User      |  Message       |
+--------------+----------------+
| other        | How are you?   |
| me           | I am good      |
+--------------+----------------+

我怎样才能做到这一点?这甚至可能只使用 1 个表,这样我就无法进行连接吗?

标签: androidsqlite

解决方案


喜欢:

SELECT * FROM "+MESSAGE_TABLE+" where senderUserID NOT IN (SELECT distinct receiverUserID from "+MESSAGE_TABLE+")
GROUP BY senderUserID, receiverUserID 
ORDER BY id DESC

推荐阅读