我正在寻找为我的应用程序设置mySQL数据库的最佳解决方案。
我的应用程序就像一个布告栏,上面有两个部分,“新通知”和“看到通知”。
现在,当用户查看了通知时,他们点击了一个按钮,它从New移动到Seen。但只适合这个人。
每个人都可以查看所有通知 - 但不一定在同一部分 - 因为用户将在不同时间查看它们并在不同时间查看它们。
我的猜测是所有通知都有一个表“Notices”,还有一个名为“Seen”的单独表格,其中包含“UserID”和“noticeID”行。这意味着对于每个通知,它将需要查阅“看到”表以查明是否应该显示它。这是理想的还是有另一种方式?
答案 0 :(得分:0)
拥有一个带有NoticeID和UserID的表是正确的,我还会添加查看日期。
答案 1 :(得分:0)
您可以使用3个表
在SeenNotices表中有三列UserID,NoticesID,HaveSeen。有HaveSeen列将告诉您用户是否已看到它。
答案 2 :(得分:0)
你的思维方式应该有效,尽管随着时间的推移,你最终会得到一个非常大的“看见”。表,不可扩展。一个简单的选择是使用'看不见的'而是表。这样,当人们查看通知时,表格会变小,您也可以删除非常旧的条目(旧通知可能不再相关,因此如果它们未显示为用户看不见则无关紧要。)
使用'看不见的'表格您的查询将如下所示:
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;