查询 - 向用户发送公共和私人消息
Posted
技术标签:
【中文标题】查询 - 向用户发送公共和私人消息【英文标题】:Query - Sending public and private messages to users 【发布时间】:2012-02-07 18:25:59 【问题描述】:需要为所有用户和个人消息实现公共消息的传递。
简化表格:
messages
+---------------+---------------------------+
| Field | Type |
+---------------+---------------------------+
| id | int(10) unsigned |
| admin_id | int(10) unsigned |
| type | enum('public','targeted') |
| subject | text |
+---------------+---------------------------+
messages_read_status
+----------------+---------------------------------+
| Field | Type |
+----------------+---------------------------------+
| id | int(10) unsigned |
| message_id | int(10) unsigned |
| user_id | int(10) unsigned |
| status | enum('unread','read') |
+----------------+---------------------------------+
发送 public 消息时 - 在 messages_read_status 表中未创建记录。对于 目标 消息 - 创建具有 未读 状态的记录。当用户读取消息时 - 设置 读取 状态。
客户端的两个过滤器 - 已读/未读。消息类型对用户来说并不重要。
主要任务 - 创建查询以向用户请求已读或未读消息,无论消息的类型如何。
主要问题是处理 public unread 消息的查询请求,因为在 messages_read_status 中可能没有它们的记录。 UNREAD 查询在某些用户阅读消息时正常工作。然后在 messages_read_status 中创建了新记录,其他用户无法再看到此消息。这种情况我解决不了。 READ 查询正常工作。
SELECT messages.* FROM messages
LEFT JOIN messages_read_status
ON messages.id = messages_read_status.message_id
WHERE
OTHER FILTERS AND
(messages_read_status.`id` IS NULL OR (messages_read_status.`user_id` = $user_id AND messages_read_status.`message_status` = '$message_status'))
samlpe sql - http://sqlfiddle.com/#!2/d940d
谢谢
【问题讨论】:
+1 用于 sqlfiddle.com 链接。 【参考方案1】:未读的方式(公开+目标)
SELECT messages.* FROM messages
LEFT JOIN messages_read_status
ON (
messages.id = messages_read_status.message_id AND
messages_read_status.`user_id` = $user_id
)
WHERE
OTHER FILTERS AND
((messages_read_status.`id` IS NULL AND messages.type='public') OR messages_read_status.`status` = 'unread')
AND for Read 使用更简单的规则
OTHER FILTERS AND messages_read_status.`user_id` = $user_id AND messages_read_status.`status` = 'read'
【讨论】:
以上是关于查询 - 向用户发送公共和私人消息的主要内容,如果未能解决你的问题,请参考以下文章