Как сделать список непрочитанных тем с помощью mysql - PullRequest
2 голосов
/ 02 августа 2009

Какой эффективный способ отобразить список с непрочитанными сообщениями на форуме? Можно отслеживать пользователя, регистрировать каждое посещаемое им сообщение и регистрировать его в новой таблице.

Я думаю, что это не очень эффективно. Какой более эффективный способ сделать это?

1 Ответ

2 голосов
/ 02 августа 2009

Если вы действительно хотите это сделать, у вас может быть таблица как

UserVisit: user_id, topic_id, last_visited_at

какую таблицу вы обновляете каждый раз, когда пользователь открывает тему. Затем вы можете выбрать темы, идентификатор которых отсутствует в этой таблице, или к которым добавлен пост позже, чем 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...