【发布时间】:2017-10-05 00:10:33
【问题描述】:
我正在制作一个通知表。结构如下:
notifications:
+----+------+----------------------+-----------------------------------+-----------+
| ID | user | notification | message | timestamp |
+----+------+----------------------+-----------------------------------+-----------+
| 1 | 6 | Denied acceptance | You have been denied for... | |
| 2 | 6 | Apreooved acceptance | You have been accepted... | |
| 3 | 0 | Open slots | there are still open slots for... | |
+----+------+----------------------+-----------------------------------+-----------+
还有一个表格,指示每个用户阅读了哪个通知
notifications_read
+----+------+--------------+-----------+
| ID | user | notification | timestamp |
+----+------+--------------+-----------+
| 1 | 6 | 2 | |
+----+------+--------------+-----------+
如果通知仅针对一个用户,则“通知”中的“用户”下有一个用户 ID - 如果通知针对所有人,我在用户下插入“0”。
我正在尝试从“通知”中选择未读取的行的查询。
我当前的查询不正确:
SELECT *
FROM notifications
WHERE id NOT IN
(SELECT notification
FROM notification_read
WHERE user = $id) AND user = $id OR user = 0
所以对于上表,它需要选择 id 为 1 & 3 的行
感谢您的帮助!
【问题讨论】:
-
当通知适用于所有用户时,“未阅读”是什么意思?您是否只查找特定用户的未读通知?