Forum Webscript.Ru
Программирование => PHP => Тема начата: Banisher от 10 Февраля 2004, 09:04:31
-
Сорри, что влезаю, но как мне кажется у меня есть вполне топичный вопрос :-)
Я тут задумывался об алгоритме нахождения новых сообщений для пользователя, но так ничего путного и не придумал... Есть одна идея, но не знаю, может можно и лучше. В общем, при заходе на страницу, основываясь на дате последнего посещения, в таблицу или/и куки пишутся все темы которые имеют новые сообщения и по прочтении такой темы её идентификатор удаляется из таблицы/кук.
Буду благодарен за любую инфу по этому вопросу.
-
в куки ты
это не запишешь
Banisher:
основываясь на дате последнего посещения
последнего посещения ЧЕГО?
-
последнего посещения ЧЕГО?
конкретного форума конкретным юзером :-)
-
то есть, я зашел на форум, мне показало, к примеру, й0 новых сообщений, дату записали.
Я, ничего не читая, с форума ушел.
А потом снова пришел.
Мне кажется, что такой алгоритм не сказать, чтобы очень для пользователя удобный.
-
хотя, конечно, это лучше, чем ничего.
всех затрат - одна кука со временем.
-
RomikChef,
Дату, конечно, новую записали. Однако в таблице осталась запись о непрочитанных сообщениях: цитирую себя:
в таблицу или/и куки пишутся все темы которые имеют новые сообщения и по прочтении такой темы её идентификатор удаляется из таблицы/кук.
Я себе это так представляю:
1. Приходит пользователь, пишем ему в специально обученное поле список ID\'ов тем, где для него есть новые сообщения, основываясь на дате его последнего визита на форум.
2. Как только он что-то читает проверяем есть ли в этом поле ID темы, которая для него новая. Если да, то удаляем ее идентификатор из списка новых, для него, тем.
3. Пишем новую дату "последнего" посещения.
Таким образом, даже если он уходит с форума не прочитав ни одного нового сообщения, или прочитав их не все в его учетной записи остается информация о непрочитанных темах.
-
писать (не в поле, конечно, а в отдельную таблицу) айдишники тем, которые надо просмотреть, не очень удобно.
лучше записывать время просмотра темы.
-
RomikChef,
Я так понимаю, что таблица будет содержать приблизительно следующие поля:
1. идентификатор пользователя
2. идентификатор темы
?3. Время просмотра темы
Так? Но почему
лучше записывать время просмотра темы
Ведь идентификатор темы все равно нужен в этой таблицы (вроде как без него не обойтись)? Зачем тогда вводить в таблицу еще одно поле?
it4all,
а как насчет моих проблем,у тебя их нет
_твоих_ проблем у меня действительно нет... я же не ты :-)))
А если серьезно, то на данный момент для меня проблема с составлением запросов, в данный момент, остро не стоит. Так что я ман по мускулу почитаю лучше, оно полезней будет.
-
Banisher он с той точки зрения претензию предъявгяет, что ты в его тему влез. Если ты еще не забыл.
в общем - справедливо.
Banisher:
Но почему
Ну, раз ты любишь самостоятельные изыскания, то я не буду портить тебе удовольствие ;-)
-
Так с запросами вы
переехали в базы данных
http://forums.webscript.ru/showthre...&threadid=15725
-
Banisher
тем не менее в чужую тему ты влез.
Хотя тема отметки непрочитаных сообщений весьма сама по себе тема обширная и мало, кем изученная.
Мной, к примеру - только теоретически.
И вообще, я не понимаю, что движет людьми, которые пишут - "чтобы не создавать новую тему". А в чем криминал-то?
Мне просто интересно.
Есть у тебя вопрос. Почему бы не создать? Денег у тебя, что ли требуют? Почему задать вопрос в существующей тебе кажется легче, чем в новой? Мне вот это интересно. Не пытался анализировать?
-
RomikChef,
Ладно проехали.
it4all, Доставлять тебе какие-либо неудобства меньше всего входило в мои планы. Так что, если тебя что-то задело, звиняй.
ЗЫ. Тем не менее я заинтересован в продолжении обсуждения проблемы отметки непрочитанных сообщений.
-
ну ладно.
я вынесу в отдельную тему.
а ты пока подумай над ней :-)
-
RomikChef
Где обещанная тема? :-)
-
RomikChef
tnx, что тему перенес.
Так вот, повторюсь зачем в таблице хранить дату? - Это раз.
И два: Я так полагаю, когда происходит выборка тем для отображения страницы следует сравнивать id\'ы тем которые я собираюсь отобразить с id\'ами тем, которые новые для пользователя и в случае истинности условия писать, что тема новая?
Я так прикинул, получается так:
1. Выборка в массив из таблицы "новых тем" id\'ов тем которые пользователь не читал
2. добавление в этот же массив id\'ов тем, в которых дата последнего поста больше чем дата последнего посещения юзером форума, если этого id\'а уже нет в массиве
3. Пишем в таблицу "новых тем" получившийся массив
4. Выборка отображаемых тем, по неким условиям и если id темы находящийся в этой выборке равен одному из id\'ов в массиве, то пишем, что в этой теме есть новые сообщения
5. Пишем текущую дату и время в запись пользователя в таблице пользователей в поле "время последнего посещения"
6. Когда пользователь читает тему, помеченную как "новая", для этого пользователя, удаляем запись о ней из таблицы "новых тем".
И второй вариант: хранить в таблице темы которые пользователь просмотрел...
-
для начала тебе надо формализовать понятие "читал".
вернее, два понятия -- "видел топик" и "читал топик".
дальше действия
-- при создании топика: видел(для всех)=читал(для всех)=0
-- при показе списка топиков: видел(для этого)=1
-- при выводе топика: видел(для этого)=читал(для этого)=1
-- при добавлении сообщения: видел(для всех)=0
можно и на дате основываться, но в этом случае сложно реализовать "пометить топик как прочитанный" и "игнорировать топик".
-
а зачем формализовывать понятие "видел"?
-
Banisher
чтобы не производить всех этих действий, которые ты перечислил.
гоша однако, Новиков базируется именно на дате.
А он, в отличие от нас с тобой - практик.
Хотя, конечно, практика у него ущербная.
Но с другой стороны, данную задачу идеально реализовать невозможно
-
2. добавление в этот же массив id\'ов тем, в которых дата последнего поста больше чем дата последнего посещения юзером форума, если этого id\'а уже нет в массиве
вот это самое ущербное место во всех рассуждениях.
гоша прав - ты путаешь понятия "видел" (а точнее - "МОГ видеть") и "читал" (а точнее - "кликал, заходил")
-
еще момент.
Записывая дату, можно показывать человеку только нечитанное.
очень удобно
-
вот, набросал с датой только.
мысль в том, что кука отсылается только при просмотре треда
а читается везде.
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]
очень схематично конечно.
надо подумать.