在论坛中显示包含未读帖子的列表的有效方法是什么?
可以跟踪用户并记录他或她访问的每个帖子,并将其注册到一个新表中。
我认为这不是很有效。做这件事的更有效的方法是什么?

最佳答案

如果你真的想这样做,你可以有一张桌子

UserVisit: user_id, topic_id, last_visited_at

每当用户打开主题时更新哪个表。
然后,您可以选择id不在此表中的主题,或添加的文章晚于上次访问的主题。类似于:
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

关于php - 如何使用mysql创建未读主题列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1218779/

10-12 13:26