Morgan » 2010.08.07 23:33 |
Единственно что прихдод на ум, это вот такой алгоритм. Если таблица : users_view_topics с полями tid (id темы), date (последняя дата просмотра данной темы). при просмотре списка тем сравнивать, если последний пост темы > последний визит юзера в данную тему, уведомлять о том что есть новые посты. При просмотре темы, обновлять информацию в таблице users_view_topics; Может есть более экономные для бд алгоритмы ? |
Gemorroj » 2010.08.08 00:14 |
писать в таблицу с темами дату последнего поста. и сравнивать по этой дате. (на дате, конечно, должен стоять ключ) так же правильно было бы использовать тип таблиц InnoDB и в данном случае нужна транзакция, т.к. уже вырисовывается как минимум 2 связанных инсерта. т.е. один из них невозможен без другого. |
Morgan » 2010.08.08 01:19 |
тут подсчитать, если 100 юзеров, и около 1000тем := 100 x 1000 = 100 000 (в самом худшем случае). других идей нет? |
Gemorroj » 2010.08.08 10:30 |
ну только если создавать еще таблицу и писать туда id пользователя и id непрочитанной темы. |
Morgan » 2010.08.08 11:00 |
а как отнесёшься к записям типа `users` = '1,2,5,10'; в таблице с полями `tid` (id темы), `users` (id пользователей, просмотревших эту тему, через запятую (',')); а дата обновления темы берется прямо из таблицы тем |
Gemorroj » 2010.08.08 12:12 |
1) как ты собираешься в таком случае получать ID тем? 2) в любом случае, правильней было бы использовать сериализованный массив, а не id через запятую.
вероятно, пост N4 нужно исправить на "создавать еще таблицу и писать туда id пользователя и id прочитанной темы." думаю, так будет оптимально. ставишь уникальный ключ на id пользователя и id темы и пишешь туда просто REPLACE INTO (userId, themeId, time) VALUES (1, 2, NOW()); |