在论坛中显示包含未读帖子的列表的有效方法是什么? 可以跟踪用户并记录他或她访问的每个帖子并将其注册到新表中。
我认为这不是很有效率。什么是更有效的方法呢?
答案 0 :(得分:2)
如果你真的想这样做,你可以有一个表格
UserVisit: user_id, topic_id, last_visited_at
每当用户打开主题时您更新哪个表。 然后,您可以选择此表中不包含id的主题,或者在last_visited_at之后添加帖子的主题。类似的东西:
SELECT *
FROM Topic
WHERE Topic.id NOT IN (SELECT topic_id FROM UserVisit WHERE user_id = $user_id)
UNION
SELECT *
FROM Topic
LEFT JOIN UserVisit ON Topic.id = UserVisit.topic_id
WHERE user_id = $user_id
AND UserVisit.last_visited_at < Topic.last_post_at
但我建议不要这样做,而是向用户展示自用户上次访问网站以来有新帖子的主题。如果您这样做,根本不需要此表,您可以将主题查询为:
SELECT *
FROM Topic
WHERE Topic.last_post_at > $users_last_visit