|
|
|
| Вот сидел думал, думал и придумал вот что. При просмотре списка форумов в файл записывается количество тем и постов. вот только фигня :) если пользователей на сайте много, будет создано много папок имя пользователя\id форума\ и наконец файл с id темы в котором и хранится сколько постов было в прошлый раз...
Как сделать проще и желательно на Базах Данных? | |
|
|
|
|
|
|
|
для: Job
(30.06.2007 в 05:32)
| | Хм... а имена пользователей хранятся в таблице базы данных? Нельзя туда добавить ещё одно поле с временем последнего посещения и подсчитывать количество новых сообщений, которые появились после этой временной метки? | |
|
|
|
|
|
|
|
для: cheops
(30.06.2007 в 06:36)
| | >Хм... а имена пользователей хранятся в таблице базы данных? Нельзя туда добавить ещё одно поле с временем последнего посещения и подсчитывать количество новых сообщений, которые появились после этой временной метки?
Тоже интересует...
cheops, это не идельный варинт | |
|
|
|
|
|
|
|
для: Sobachka
(30.06.2007 в 11:41)
| | А что же Вас смущает в этом варианте?
Такой способ кстати и используется в LiteForum... | |
|
|
|
|
|
|
|
для: ddhvvn
(30.06.2007 в 11:52)
| | >А что же Вас смущает в этом варианте?
Если человек посетил портал в момент времени T, это еще не значит, что он прочитал сообщения всех ветвей, написанные к этому моменту.
>Такой способ кстати и используется в LiteForum...
Это лишь причина переделать LiteForum, но никак не повод брать с него пример.
PS. cheops, помнится, около года назад утверждал, что для честного хранения таблицы ластридов ему не хватает объема БД и/или процессорных мощностей. Но тогда каша варилась еще на нодексе...
PS2. Ветвь я найти не смог, хотя очень пытался, и слова в ней были характерные... | |
|
|
|
|
|
|
|
для: Trianon
(30.06.2007 в 11:59)
| | >Если человек посетил портал в момент времени T, это еще не значит, что он прочитал сообщения всех ветвей, написанные к этому моменту.
Да, но ведь вопрос стоит в подсветке новых сообщений. А новые сообщения, насколько я понимаю - сообщения появившиеся после последнего посещения пользователем форума.... | |
|
|
|
|
|
|
|
для: LordFreeman
(30.06.2007 в 12:32)
| | >Да, но ведь вопрос стоит в подсветке новых сообщений. А новые сообщения, насколько я понимаю - сообщения появившиеся после последнего посещения пользователем форума....
Такая трактовка не несет смысла и обычно только раздражает посетителя.
Я не одну истерику видел, когда человек при неустойчиво работающем канале инета заходил в форум, связь обрывалась, а потом при повторном заходе, он не мог найти непрочитанное во всех ветвях. Да и сам матюги складывал в аналогичных случаях. Речь не только о LiteForum, многие движки этим грешат.
Самое неприятное, что в LiteForum это проявляется не только при плохой связи.
Заходишь в раздел. Несколько сотен новых сообщений.
Смотришь, отвечаешь на них потихоньку. Прерываться нельзя.
Если пашешь без пауз - волна просмотренных тем никак не помечается.
Если не успееешь пропахать весь раздел без 20мин перерыва - хлоп! - нетронутое исчезает. | |
|
|
|
|
|
|
|
для: Trianon
(30.06.2007 в 12:41)
| | Да, Trianon, именно в этом и проблема.
По дпте последнего посещения непойдет.
Нужно именно по количеству сообщений
Всё даже отлично работает в моем варианте, правда громозко.
Но вот, опять же проблема допустим я зашел на форум мне записалось что сообщения 15, вышел,.... Администратор удалил сообщение, сообщений стало 14, а у меня записано 15. и тогда я пропущу одно новое сообщение. Это плохо.
Как же всётаки можно это всё осилить?
Может сделать что-то типа этого...
хм...
if($post[$i]<$file[0]) $flash = "del_m.gif"; //Если меньше чем было показывать что удалено
if($post[$i]==$file[0]) $flash = "off_m.gif"; //Если равно, показывать что нет новых
if($post[$i]>$file[0]) $flash = "on_m.gif"; //Если больше, показывать что новые сообщения
|
Но тоже блин надоест по форуму лазить и смотреть все темы где были удалены сообщения....
Какой же тут выход?
И вообще можно ли это всё как нибудь на БД перевести?
И как же тогда PHPBB Всё делает? | |
|
|
|
|
|
|
|
для: Job
(30.06.2007 в 14:38)
| | Так Вы хотите просто картинку пихнуть? Можно хранить не кол-во сообщений а MAX(`id`) FROM `messages` WHERE `topic` = 'идентификатор_темы'. И сверять его с текущим.
В таком случае даже можно хранить MAX(`id`) в бинарном виде, чтобы в последствии занимало меньше. Хотя, ощутите это только при MAX(`id`) > 9999. | |
|
|
|
|
|
|
|
для: Unkind
(30.06.2007 в 14:42)
| | ага! Отлично! Идея с макс id понравилась :)
А сообщения в форуме можно тогда и по дате подсвечивать, ничего не случится :)
А как бы это всё в базе хранить?
Ведь неизвестно в каком форуме новую тему начнут...
Расчитать количество тем нереально...
Как это делают? | |
|
|
|
|
|
|
|
для: Job
(30.06.2007 в 14:38)
| | >Да, Trianon, именно в этом и проблема.
>По дпте последнего посещения непойдет.
>Нужно именно по количеству сообщений
>
>Всё даже отлично работает в моем варианте, правда громозко.
>
>Но вот, опять же проблема допустим я зашел на форум мне записалось что сообщения 15, вышел,.... Администратор удалил сообщение, сообщений стало 14, а у меня записано 15. и тогда я пропущу одно новое сообщение. Это плохо.
Хранят ластриды: это пометки - id-ы последних просмотренных сообщений в таблице.
В самом грубом виде если -
id_thread, id_user, id_lastread
но мощность такой таблицы - число ветвей х число пользователей.
>Как же всётаки можно это всё осилить?
>Какой же тут выход?
Unkind (22.06.2007 в 00:57) предложил выдвинуть эту проблему очередной задачей.
>
>И вообще можно ли это всё как нибудь на БД перевести?
О том чтобы хранить всё это в файлах, речи даже не идет.
Хотя ... такие умельцы могут найтись, что оптимизируют поиск именно для этого случая.
>И как же тогда PHPBB Всё делает?
Если мне память не изменяет - в БД.
Впрочем я видел варианты и с кукисным хранением ластридов.
В том же phpclub.ru . Но тут другая проблема - ластриды теряются при переходе с работы домой например. И совершенно бесполезны в инет-кафе.
Опять же, возможно, на практике лучшим будет комбинированный вариант.
Работает посетитель с форумом - ластриды в кукисах, все довольны.
Закончил работу, нажал "Выход" - ластриды ушли в БД.
Зашел с другой машины, ластриды загрузились на клиент в кукисы. | |
|
|
|
|
|
|
|
для: Trianon
(30.06.2007 в 14:59)
| | А как именно будет выглядеть запрос на MAX(id)?
$query = mysql_query("SELECT * FROM `post` WHERE `id_t` = '42';");
$row = mysql_fetch_object($query);
$max_id = $row->MAX(id);
print("$max_id");
|
Это единственный бред который пришел мне в голову.... :) | |
|
|
|
|
|
|
|
для: Job
(01.07.2007 в 20:35)
| |
<?php
$sql = mysql_query("SELECT MAX(`id`) FROM `post` WHERE `id_t` = '42';");
$max_id = mysql_result($sql, 0);
?>
|
| |
|
|
|