MySQL - 选择没有添加条件的相关记录的记录

标签 mysql

最近在这里和其他地方看到了一系列关于构建聊天应用程序的帖子,我认为这些应用程序是针对期末项目的,并从中获得了灵感,尝试自己构建。

我有一个用户发送的消息表,基本上包含以下字段:

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 行,在 messages_read 表中没有该 chat_id 和 user_id 的对应记录(但是,该 message_id 可能已被其他用户读取)

要点是,当我通过 AJAX 轮询服务器时,结果页面 (PHP) 应该只返回登录用户尚未看到的 JSON 编码消息列表。

有人有任何建议,或者需要我提供更多信息,以便您可以引导我找到正确的解决方案吗?

谢谢!

最佳答案

尝试一下:

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 JOINmr.user_id IS NULL 将仅选择 messages_to_chats 中在 messages_read 中没有匹配行的行。

关于MySQL - 选择没有添加条件的相关记录的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43722526/

相关文章:

php - 将表单数据插入 MySQL?

mysql - 如何通过 EasyPHP DevServer 的命令行访问 MySQL

c# - MySql查询不显示结果

mysql - 错误 2006 (HY000) 在第 2759 行 : MySQL server has gone away

java - 使用 MySQL 流式传输大型结果集

MYSQL,如何获取ID大于4的数据

php - 快速加入大数据表与键表

MySQL按列从表中选择x条记录

php - 使用 php mysql 的报告中的多个搜索表单

php - 在 foreach 循环 (PHP) 中内爆数组以构建 SQL 查询 : invalid argument error