По какому механизму работают информеры о новых постах и темах на многих форуах (далеко ходить не надо, возьмём к примеру джоновский форум), где для каждого пользователя формируется список непрочитанных сообщений и тем? Притом прочитав определённую тему или новые сообщения в былой теме, такая тема исчезает из списка непрочитанных, а все остальные остаются. Как происходит выборка из базы, запись что та или иная тема прочитана. Притом всё это происходит для каждого пользователя индивидуально. Если создавать дубликаты тем и постов для каждого пользователя, а в их таблицах поля, где можно присваивать значения прочитано или нет, а потом на форуме сравнивать с оригиналами, и посты со статусом непрочитано выводить в списке, после прочтения отмечать как прочитанные записью в базу, то это кажется выглядит не совсем ахти. Особенно при большом количестве юзеров и интенсивности заполнения форума сообщениями. Поэтому вопрос очень волнующий.
10 Авг 2012, 17:08В джоне есть специальная таблица в которую вписываются данные о прочтении темы для каждого пользователя.
10 Авг 2012, 17:10JaRUS,новые сообщения и посты имеют дату и время размещения.следовательно..берем дату и время последней авторизации пользователя и ищем в бд.посты и темы > "старше" даты(авторизации пользователя).
10 Авг 2012, 17:54Afictox,согласен.
добавлено спустя 1 минуту:
JaRUS,прсто сделай
-
-Новые посты
-
И как сказано выше(3).
JaRUS, записывай время последнего визита/поиска новых тем и при следующем заходе отображай темы, время последнего поста в которых > записанному времени для данного пользователя.
На счет второго поста и специальной таблице, глупо, на мой взгляд. Ну зашел я посмотреть новые темы/посты, заглянул в темы, которые мне интересны, остальные получается не пометились как прочтенные и будут отображаться в новых, ну и нахрена они мне там нужны?
А не проще сделать простой вывод новых тем/сообщений за сутки? И не парить мозг всякой фигней!
10 Авг 2012, 18:157 не проще, это убогая система, человека может не быть на сайте 3 дня, ток не предлагай выводить сообщения за 3 дня, ибо человек можт уехать в отпуск на неделю.
Про неделю тоже не предлагай, кто знает что еще может случиться с человеком.
код пишет:
"$req = mysql_query("SELECT `forum`.`id`
FROM `forum` LEFT JOIN `cms_forum_rdm` ON `forum`.`id` = `cms_forum_rdm`.`topic_id` AND `cms_forum_rdm`.`user_id` = '" . $user_id .
"'
WHERE `forum`.`type`='t'
AND `cms_forum_rdm`.`topic_id` Is Null");
while ($res = mysql_fetch_array($req)) {
mysql_query("INSERT INTO `cms_forum_rdm` SET
`topic_id`='" . $res['id'] . "',
`user_id`='" . $user_id . "',
`time`='" . $realtime . "'");
}
$req = mysql_query("SELECT `forum`.`id` AS `id`
FROM `forum` LEFT JOIN `cms_forum_rdm` ON `forum`.`id` = `cms_forum_rdm`.`topic_id` AND `cms_forum_rdm`.`user_id` = '" . $user_id .
"'
WHERE `forum`.`type`='t'
AND `forum`.`time` > `cms_forum_rdm`.`time`");
while ($res = mysql_fetch_array($req)) {
mysql_query("UPDATE `cms_forum_rdm` SET `time`='" . $realtime . "' WHERE `topic_id`='" . $res['id'] . "' AND `user_id`='" . $user_id . "'");
}
$_SESSION['fnew'] = 0;
$_SESSION['fnewtime'] = time();
echo '<p>Все темы приняты как прочитанные</p>';
break;
case 'select' :
echo '<div class="phdr"><b>Показать за период</b></div>';
echo '<div class="menu"><p><form action="index.php?act=new&do=all" method="post">Период(в часах):<br/>';
echo '<input type="text" maxlength="3" name="vr" value="24" size="3"/>';
echo '<input type="hidden" name="act" value="all"/><input type="submit" name="submit" value="Показать"/></form></p></div>';
echo '<div class="phdr"><a href="index.php?act=new">Назад</a></div>';
break;"
судя по этому куску, дубликаты постов создаются для каждого.
только непонятно как-то.. Эт же какя нагрузка идёт. неее. Тут что-то не так
код2 пишет:
"while ($res = mysql_fetch_array($req)) {
mysql_query("INSERT INTO `cms_forum_rdm` SET
`topic_id`='" . $res['id'] . "',
`user_id`='" . $user_id . "',
`time`='" . $realtime . "'");
}"
этот цикл создаёт мноооого таблиц для любого запустившего этот процесс юзверя, записывает ид прочитанных тем, ид пользователя и время. пипец сколько хлама в базе.. при тысячи пользователей и 1оооо тем, в таблице cms_forum_rdm будет 1о миллионов таблиц о_О