我正在开发一个android sqlite db
我有2个表:chat,chat_messages
chat
|_id |chatName
1 first
2 second
chat_messages
|_id |Chat_chatId |chatMessageContent |chatMessageId
1 1 ttyl 4
2 1 busy 3
3 2 hi 2
4 1 hi howdy 1
我希望每个聊天显示一个显示最新chatMessageContent的页面 如下所示
result
|chatName |chatMessageContent |chatMessageId
first ttyl 4
second hi 2
由于从服务器恢复的数据出现故障,每次聊天的最新chatMessageContent需要遵循chatMessageId desc
如果子查询的Mysql工作
Select * from (Select c._id,c.chatName,cm._id,cm.chatMessageContent,cm.chatMessageId from chat c, chat_message cm where cm.Chat_chatId = c._id order by cm.chatMessageId desc ) as lc GROUP BY lc.Chat_chatId
但它不适用于sqlite
答案 0 :(得分:1)
SELECT c.chatName, cm.chatMessageContent, cm.chatMessageId FROM chat_messages cm
INNER JOIN chat c ON c._id = cm.Chat_chatId
INNER JOIN (SELECT MAX(chatMessageId) as maxid, Chat_chatId FROM chat_messages GROUP BY Chat_chatId) AS t ON t.maxid=cm.chatMessageId
子查询确保每次聊天都能获得最大的chatMessageId。通过内部连接到chatmessages表,您可以消除所有其他聊天消息,您也可以从chatmessages表中查询其他字段。
答案 1 :(得分:0)
尝试此查询,我认为这是一个适合您的解决方案。这不是更好的解决方案,但是......
SELECT * FROM chat_messages t
JOIN chat c ON c._id = t.Chat_chatId
WHERE chatMessageId = (
SELECT MAX(t2.chatMessageId)
FROM chat_messages t2
WHERE t2.Chat_chatId = t.Chat_chatId
)