查询 - 向用户发送公共和私人消息

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'

【讨论】:

以上是关于查询 - 向用户发送公共和私人消息的主要内容,如果未能解决你的问题,请参考以下文章

无法从我的不和谐机器人向用户发送私人消息?

向一组用户发送私人消息(Discord.js)

发送公共消息,包括发送方 Socket.io

如何在不和谐上发送私人消息[关闭]

向人员列表发送私人消息

在应用内发送 Facebook 私人消息