在 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 中执行视图时出现“超时已过期”错误
当我尝试在 sequel pro 中运行此查询时出现错误 [重复]