Forum Webscript.Ru

Программирование => PHP => Тема начата: Banisher от 10 Февраля 2004, 09:04:31

Название: Новые сообщения на форуме
Отправлено: Banisher от 10 Февраля 2004, 09:04:31
Сорри, что влезаю, но как мне кажется у меня есть вполне топичный вопрос :-)
Я тут задумывался об алгоритме нахождения новых сообщений для пользователя, но так ничего путного и не придумал... Есть одна идея, но не знаю, может можно и лучше. В общем, при заходе на страницу, основываясь на дате последнего посещения, в таблицу или/и куки пишутся все темы которые имеют новые сообщения и по прочтении такой темы её идентификатор удаляется из таблицы/кук.
Буду благодарен за любую инфу по этому вопросу.
Название: Новые сообщения на форуме
Отправлено: Меняздесьдавнонет от 10 Февраля 2004, 10:40:51
в куки ты
это не запишешь

Цитировать
Banisher:
основываясь на дате последнего посещения

последнего посещения ЧЕГО?
Название: Новые сообщения на форуме
Отправлено: Banisher от 10 Февраля 2004, 12:29:55
Цитировать
последнего посещения ЧЕГО?

конкретного форума конкретным юзером :-)
Название: Новые сообщения на форуме
Отправлено: Меняздесьдавнонет от 10 Февраля 2004, 12:33:30
то есть, я зашел на форум, мне показало, к примеру, й0 новых сообщений, дату записали.
Я, ничего не читая, с форума ушел.
А потом снова пришел.

Мне кажется, что такой алгоритм не сказать, чтобы очень для пользователя удобный.
Название: Новые сообщения на форуме
Отправлено: Меняздесьдавнонет от 10 Февраля 2004, 12:47:19
хотя, конечно, это лучше, чем ничего.
всех затрат - одна кука со временем.
Название: Новые сообщения на форуме
Отправлено: Banisher от 10 Февраля 2004, 12:56:49
RomikChef,
Дату, конечно, новую записали. Однако в таблице осталась запись о непрочитанных сообщениях: цитирую себя:
Цитировать
в таблицу или/и куки пишутся все темы которые имеют новые сообщения и по прочтении такой темы её идентификатор удаляется из таблицы/кук.

Я себе это так представляю:
1. Приходит пользователь, пишем ему в специально обученное поле список ID\'ов тем, где для него есть новые сообщения, основываясь на дате его последнего визита на форум.
2. Как только он что-то читает проверяем есть ли в этом поле ID темы, которая для него новая. Если да, то удаляем ее идентификатор из списка новых, для него, тем.
3. Пишем новую дату "последнего" посещения.

Таким образом, даже если он уходит с форума не прочитав ни одного нового сообщения, или прочитав их не все в его учетной записи остается информация о непрочитанных темах.
Название: Новые сообщения на форуме
Отправлено: Меняздесьдавнонет от 10 Февраля 2004, 18:59:01
писать (не в поле, конечно, а в отдельную таблицу) айдишники тем, которые надо просмотреть, не очень удобно.
лучше записывать время просмотра темы.
Название: Новые сообщения на форуме
Отправлено: Banisher от 11 Февраля 2004, 08:54:00
RomikChef,
Я так понимаю, что таблица будет содержать приблизительно следующие поля:
1. идентификатор пользователя
2. идентификатор темы
?3. Время просмотра темы
Так? Но почему
Цитировать
лучше записывать время просмотра темы

Ведь идентификатор темы все равно нужен в этой таблицы (вроде как без него не обойтись)? Зачем тогда вводить в таблицу еще одно поле?
it4all,
Цитировать
а как насчет моих проблем,у тебя их нет

_твоих_ проблем у меня действительно нет... я же не ты :-)))
А если серьезно, то на данный момент для меня проблема с составлением запросов, в данный момент, остро не стоит. Так что я ман по мускулу почитаю лучше, оно полезней будет.
Название: Новые сообщения на форуме
Отправлено: Меняздесьдавнонет от 11 Февраля 2004, 11:14:09
Banisher он с той точки зрения претензию предъявгяет, что ты в его тему влез. Если ты еще не забыл.
в общем - справедливо.
Цитировать
Banisher:
Но почему

Ну, раз ты любишь самостоятельные изыскания, то я не буду портить тебе удовольствие ;-)
Название: Новые сообщения на форуме
Отправлено: Banisher от 11 Февраля 2004, 11:55:22
Так с запросами вы
Цитировать

переехали в базы данных
http://forums.webscript.ru/showthre...&threadid=15725
Название: Новые сообщения на форуме
Отправлено: Меняздесьдавнонет от 11 Февраля 2004, 12:10:54
Banisher
тем не менее в чужую тему ты влез.
Хотя тема отметки непрочитаных сообщений весьма сама по себе тема обширная и мало, кем изученная.
Мной, к примеру - только теоретически.

И вообще, я не понимаю, что движет людьми, которые пишут - "чтобы не создавать новую тему". А в чем криминал-то?
Мне просто интересно.
Есть у тебя вопрос. Почему бы не создать? Денег у тебя, что ли требуют? Почему задать вопрос в существующей тебе кажется легче, чем в новой? Мне вот это интересно. Не пытался анализировать?
Название: Новые сообщения на форуме
Отправлено: Banisher от 11 Февраля 2004, 13:10:49
RomikChef,
Ладно проехали.
it4all, Доставлять тебе какие-либо неудобства меньше всего входило в мои планы. Так что, если тебя что-то задело, звиняй.

ЗЫ. Тем не менее я заинтересован в продолжении обсуждения проблемы отметки непрочитанных сообщений.
Название: Новые сообщения на форуме
Отправлено: Меняздесьдавнонет от 11 Февраля 2004, 13:34:25
ну ладно.
я вынесу в отдельную тему.
а ты пока подумай над ней :-)
Название: Новые сообщения на форуме
Отправлено: Banisher от 16 Февраля 2004, 00:48:19
RomikChef
Где обещанная тема? :-)
Название: Новые сообщения на форуме
Отправлено: Banisher от 16 Февраля 2004, 13:49:16
RomikChef
tnx, что тему перенес.
Так вот, повторюсь зачем в таблице хранить дату? - Это раз.
И два: Я так полагаю, когда происходит выборка тем для отображения страницы следует сравнивать id\'ы тем которые я собираюсь отобразить с id\'ами тем, которые новые для пользователя и в случае истинности условия писать, что тема новая?
Я так прикинул, получается так:
1. Выборка в массив из таблицы "новых тем" id\'ов тем которые пользователь не читал

2. добавление в этот же массив id\'ов тем, в которых дата  последнего поста больше чем дата последнего посещения юзером форума, если этого id\'а уже нет в массиве

3. Пишем в таблицу "новых тем" получившийся массив

4. Выборка отображаемых тем, по неким условиям и если id темы находящийся в этой выборке равен одному из id\'ов в массиве, то пишем, что в этой теме есть новые сообщения

5. Пишем текущую дату и время в запись пользователя в таблице пользователей в поле "время последнего посещения"

6. Когда пользователь читает тему, помеченную как "новая", для этого пользователя, удаляем запись о ней из таблицы "новых тем".

И второй вариант: хранить в таблице темы которые пользователь просмотрел...
Название: Новые сообщения на форуме
Отправлено: гоша от 16 Февраля 2004, 14:24:49
для начала тебе надо формализовать понятие "читал".
вернее, два понятия -- "видел топик" и "читал топик".

дальше действия

-- при создании топика: видел(для всех)=читал(для всех)=0
-- при показе списка топиков: видел(для этого)=1
-- при выводе топика: видел(для этого)=читал(для этого)=1
-- при добавлении сообщения: видел(для всех)=0

можно и на дате основываться, но в этом случае сложно  реализовать "пометить топик как прочитанный" и "игнорировать топик".
Название: Новые сообщения на форуме
Отправлено: Меняздесьдавнонет от 16 Февраля 2004, 14:45:03
а зачем формализовывать понятие "видел"?
Название: Новые сообщения на форуме
Отправлено: Меняздесьдавнонет от 16 Февраля 2004, 14:58:22
Banisher
чтобы не производить всех этих действий, которые ты перечислил.


гоша однако, Новиков базируется именно на дате.
А он, в отличие от нас с тобой - практик.
Хотя, конечно, практика у него ущербная.
Но с другой стороны, данную задачу идеально реализовать невозможно
Название: Новые сообщения на форуме
Отправлено: Меняздесьдавнонет от 16 Февраля 2004, 15:01:30
Цитировать
2. добавление в этот же массив id\'ов тем, в которых дата последнего поста больше чем дата последнего посещения юзером форума, если этого id\'а уже нет в массиве

вот это самое ущербное место во всех рассуждениях.
гоша прав - ты путаешь понятия "видел" (а точнее - "МОГ видеть") и "читал" (а точнее - "кликал, заходил")
Название: Новые сообщения на форуме
Отправлено: Меняздесьдавнонет от 17 Февраля 2004, 15:06:18
еще момент.
Записывая дату, можно показывать человеку только нечитанное.
очень удобно
Название: Новые сообщения на форуме
Отправлено: гоша от 17 Февраля 2004, 15:53:52
вот, набросал с датой только.
мысль в том, что кука отсылается только при просмотре треда
а читается везде.


TOPIC
id
title
mdate

THREAD
id
id_topic
title
mdate

MESSAGE
id
id_thread
ctext
mdate


topics.php
---------------------------------

lastDate=$_COOKIE[...]

query (SELECT *,mdate>lastDate as new FROM topics)
while(fetch(...))
if(row[new])
new!
row[title]


threads.php ? id_topic
---------------------------------

lastDate=$_COOKIE[...]

query (SELECT *,mdate>lastDate as new FROM threads WHERE id_topic=$_GET[id_topic])
while(fetch(...))
if(row[new])
new!
row[title]

messages.php ? id_thread & onlynew & vieworder
---------------------------------

lastDate=$_COOKIE[...]
setCookie(lastDate,time())

if($_POST){
insert into MESSAGE...
id_topic=select id_topic from THREAD where id=id_thread
update THREAD set mdate where id=id_thread
update TOPIC  set mdate where id=id_topic
redirect
}

$sql = SELECT *,mdate>lastDate as new FROM messages WHERE id_thread=$_GET[id_topic]) ORDER BY mdate $_GET[vieworder]
if($_GET[onlynew])
$sql.= HAVING new > 0

query($sql)
while(fetch(...))
if(row[new])
new!
row[ctext]


очень схематично конечно.
надо подумать.