在 mysql 中编写此查询时出现问题(在论坛中标记已读消息)

Posted

技术标签:

【中文标题】在 mysql 中编写此查询时出现问题(在论坛中标记已读消息)【英文标题】:Problem writing this query in mysql (marking read messages in a forum) 【发布时间】:2009-06-08 10:13:23 【问题描述】:

嘿。我正在写一个论坛,我有这张表来标记特定用户阅读的消息:

`read_messages`(`message_id`,`user_id`)

消息表的简化版本:

`messages`(`id`,`forum_id`,`author_id`)

现在,我希望能够在从给定论坛的数据库中检索消息数据时添加一个变量,该变量将告诉我当前用户是否已阅读该消息。我知道如何通过 2 个查询来做到这一点(第一次我检索所有消息,然后如果用户已阅读它们,我会检查它们中的每一个),但不知道如何将它们连接在一起。有什么想法吗?

【问题讨论】:

【参考方案1】:
SELECT messages.*, read_messages.id as read_id
FROM messages 
LEFT OUTER JOIN read_messages 
   ON ( messages.id = read_messages.message_id AND read_messages.user_id  = [ USER ID ] )

如果 read_id 返回为 > 0 的数字而不是 NULL,则该消息已被读取,因为在 read_messages 中有该用户的相应记录。

【讨论】:

【参考方案2】:

听起来您正在执行外部联接,请查看 Outer Joins Section 的语法,它允许您从一个表中选择所有值,并选择不存在值的 NULLS。

【讨论】:

以上是关于在 mysql 中编写此查询时出现问题(在论坛中标记已读消息)的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中执行大型 SQL 查询字符串时出现“内存不足”错误

在 SQL Server 2008 中执行视图时出现“超时已过期”错误

在 python 代码中执行更新查询时出现此错误

当我尝试在 sequel pro 中运行此查询时出现错误 [重复]

使用 INSERT INTO 时出现 MySQL 错误 2002

查询 MySql 视图时出现 SQLGrammar 错误