0

我正在为我的应用程序设置 mySQL 数据库的方式寻找最佳解决方案。

我的应用程序就像一个布告栏,有两个部分,“新通知”和“已查看通知”。

现在,当用户查看通知时,他们单击一个按钮,它会从 New 移动到 Seen。但只针对这个人。

每个人都可以查看所有通知 - 但不一定在相同的部分 - 因为用户将在不同时间查看它们并在不同时间查看它们。

我的猜测是所有通知都有一个表“通知”,以及一个名为“Seen”的单独表,其中包含“UserID”和“noticeID”行。这意味着对于每个通知,它都需要查阅“Seen”表来确定是否应该显示它。这是理想的还是有其他方法?

4

3 回答 3

0

有一个带有 NoticeID 和 UserID 的表是正确的,我还要添加查看日期。

于 2012-10-18T04:26:52.567 回答
0

您可以使用 3 张桌子

  1. 用户
  2. 通知
  3. SeenNotices(也许不是最好的名字)

在 SeenNotices 表中有三列 UserID、NoticesID、HaveSeen。have HaveSeen 列会告诉您用户是否已经看过它。

于 2012-10-18T04:29:23.717 回答
0

您的思维方式应该可行,尽管随着时间的推移,您最终会得到一个非常大的“Seen”表,它是不可扩展的。一个简单的替代方法是改用“Unseen”表。这样,当人们查看通知时,表格会变小,您还可以删除非常旧的条目(旧通知可能不再相关,因此如果它们未向用户显示为“未见”则无关紧要)。

使用 'unseen' 表,您的查询将如下所示:

SELECT n.notice_id, n.notice_msg, IF(u.user_id, 'new', 'seen') AS status
FROM notice n
LEFT JOIN unseen u ON (u.user_id = $user_id AND n.notice_id = u.notice_id)
WHERE user_id = $user_id;
于 2012-10-18T04:43:38.323 回答