最近在这里和其他地方发现了一些关于构建聊天应用程序的帖子,我认为这是一个决赛项目,并从中获取灵感,尝试自己构建。
我已经获得了用户基本上发送的消息表:
message_id
chat_id
user_id
message
用户读取的消息表,其中包含以下字段:
message_id
chat_id
user_id
date_seen
我正在尝试构建一个查询来提取特定用户未查看的给定聊天的所有消息。在我尝试指定用户之前,我没有遇到过看不见的邮件的问题,但这个问题让我很难过。
这没有给我任何结果:
SELECT DISTINCT mc.*
FROM messages_to_chats mc
LEFT JOIN messages_read mr
ON mc.chat_id = mr.chat_id
WHERE mr.chat_uuid = "1" AND mr.user_id = '1' AND mr.date_seen is null
这给了我所有人都没有读过的消息:
SELECT mc.*
FROM messages_to_chats mc
LEFT JOIN messages_read mr
ON mc.message_id = mr.message_id
WHERE mc.chat_id = "1" AND mr.user_id is null
这为我提供了user_id 1已读取的所有消息:
SELECT mc.*
FROM messages_to_chats mc
LEFT JOIN messages_read mr
ON mc.message_id = mr.message_id
WHERE mc.chat_id = "1" AND mr.user_id = '1'
当我在WHERE子句中将=
更改为!=
时,它根本没有给我任何记录,而只是来自mc
表中不记录的记录在mr
表中有相应的记录。
本质上,messages_to_chats表中有4行,对于chat_id和user_id(该message_id可能已被其他用户读取),messages_read表中没有相应的记录。 p>
点是当我通过AJAX轮询服务器时,结果页面(PHP)应该只返回登录用户尚未看到的JSON编码消息列表。
任何人都有任何建议,或者需要我提供更多信息,以便引导我找到正确的解决方案?
谢谢!
答案 0 :(得分:0)
尝试一下:
SELECT mc.*
FROM messages_to_chats mc
LEFT JOIN messages_read mr
ON mc.message_id = mr.message_id
WHERE mr.user_id IS NULL and mc.user_id = 1
LEFT JOIN
和mr.user_id IS NULL
将只选择messages_to_chats中messages_read中没有匹配行的行。