【发布时间】:2015-05-21 02:07:54
【问题描述】:
首先抱歉我的英语不好。我的情况如下:
我正在开发一个向许多用户发送通知消息的通知服务。我在 MySql 上有以下 3 个表
users(user_id)
notifications(notification_id, notification)
notifications_log(notification_log_id, notification_id, user_id)
每次用户阅读通知时,我都会在通知日志表中插入一条记录,例如。使用user_id = 2 的John 用户使用notification_id =3 阅读通知:“这是一个通知”,然后我在notifications_log 上插入一条记录,使用user_id = 2 和notification_id = 3。
一切正常,但我必须创建一个查询来获取所有未插入到通知日志中的用户的所有通知。我有的是:
SELECT u.user_id, n.notification_id, n.notification, nl.notification_log_id
FROM users as u
LEFT JOIN notifications_log as nl ON nl.user_id = u.user_id
CROSS JOIN notifications as n
WHERE u.user_id NOT IN (SELECT nl.user_id FROM notifications_log as nl)
AND u.user_id = 1 /* test with user 1 */
如果用户1的notifications_log表没有记录,查询结果显示我
user_id | notification | notification_id | notification_log_id
------------------------------------------------------------------------------
- 1 | Notification_1 | 1 | null
- 1 | Notification_2 | 2 | null
但是如果我在notifications_log 上为用户和notification_2 插入至少1 条记录,那么我得到空结果,我应该得到:
user_id | notification | notification_id | notification_log_id
----------------------------------------------------------------------------
- 1 | Notification_1 | 1 | null
似乎该查询将notification_log_id连接到另一条notification_log_id为空的记录...
简而言之,我需要的是获取来自特定用户的所有通知,这些通知没有插入到表通知日志中
提前致谢!
【问题讨论】:
-
顺便说一句,你的英语很好。可能有 4 或 5 个小语法错误。就是这样。
标签: php mysql notifications