我正在开发一个聊天应用程序,其中消息被保存在离线室数据库中
我有两张桌子
Contact
- contact_id
- contact_name
- about
ChatMessage
- contact_id
- content
- received_at
在聊天屏幕上,我通过查询联系人表来显示最近的聊天记录,但是我试图显示最近的聊天记录,因此更好的方法是查询ChatMessage表以获取唯一的最新消息并检索联系人信息(如姓名)
所以我实施了一种非常糟糕的方法(可能是最糟糕的方法),其中包括
1.获取所有聊天消息
2.按contact_id与最近的聊天分组
3.在for循环查询中,获取联系人行,并将名称附加到主要对象列表中
4.在回收站视图中显示列表
我想知道是否有更好的方法可以做到这一点
我认为关系或联接可以提供帮助,但是我不知道它们或它们在房间DB中的实现
任何帮助将不胜感激
检查Java中的下一种方法(但对Kotlin来说,想法是相同的):
message_id
(主键)添加到您的ChatMessage
实体。Contact
和ChatMessage
实体,再添加一个类LastMessages
(不是实体,只是POJO):public class LastMessage {
@Embedded
public ChatMessage lastMessage;
@Relation(
parentColumn = "contact_id",
entityColumn = "contact_id"
)
public Contact contact;
}
@Transaction
@Query("SELECT * FROM chat_message AS cm JOIN (SELECT contact_id, max(received_at) AS received_at FROM chat_message GROUP BY contact_id) AS cm_last ON cm_last.contact_id = cm.contact_id AND cm_last.received_at = cm.received_at")
public List<LastMessage> getLastMessages();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句