Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Настройки прав доступа по группам
  • Настройки прав доступа по каждой категории
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
 
 
 
 

 
 
Здесь скоро опять что то будет...
 
 
 
 
 
 
Loading

Вернуться   форум vBSupport.org > vBulletin > vBulletin 3.8.x > Вопросы по vBulletin 3.8

Объявления
  • Изменения в правах
  • Каталог Фрилансеров
  • Добро пожаловать!
  • Premoderation
  • Новичкам!
  • For English speaking users
Ответ
 
Опции темы Опции просмотра
Старый 29.03.2009, 01:22   #1
Эксперт
 
Аватар для CityCat
Где в БД хранятся записи о непрочитанных сообщениях?

Собственно сабж. Дописываю один модуль и ни как не могу понять - как найти в БД ID (или ещё чего) тем, непрочитанных пользователем. Полазив по файлам понял, что зависит всё это от нескольких переменных:

PHP код:
$vbulletin->options['usehotthreads'
$thread['replycount']
$vbulletin->options['hotnumberposts']
$vbulletin->options['hotnumberposts']
$thread['views']
$vbulletin->options['hotnumberviews']
$vbulletin->options['hotnumberviews'
Может не от всех.
Кто подскажет, как из БД выдернуть темы (или ID), которые пользователь не прочитал?
Причём надо именно записи БД, а не переменные vBulletin.

Надеюсь объяснил подробно.

Сорри - сам понял ;)

Беру из vb_user 'lastactivity' и сравниваю с vb_post 'dateline' - думаю, что делаю правильно.
Может у кого есть другие идеи?

CityCat добавил 29.03.2009 в 03:54
Не совсем панацея, т.к. при следующем посещении форума vb_user 'lastactivity' сбрасывается на текущее время (и не понять, конкретная тема прочитана или нет), то есть получается, я зашёл на форум и после этого все темы у меня прочитаны...
Есть идеи?

Последний раз редактировалось CityCat; 29.03.2009 в 03:55.. Причина: Добавлено сообщение
  Ответить с цитированием
Рекламка
Реклама на форуме

Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Тонкие настройки прав доступа
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
Старый 30.03.2009, 10:27   #2
Ghost
Гуру
 
Аватар для Ghost
Цитата:
Сообщение от CityCat Посмотреть сообщение
Есть идеи?
есть. использовать для определения времени прочтения указанной темы таблицу vb_threadread - это раз. не учитывать сообщения/темы, созданные/обновленные ранее чем $vbulletin->options['markinglimit'] дней назад - это два.
  Ответить с цитированием
Старый 30.03.2009, 11:11   #3
CityCat
Эксперт
 
Аватар для CityCat
Цитата:
Сообщение от Ghost Посмотреть сообщение
есть. использовать для определения времени прочтения указанной темы таблицу vb_treadread - это раз...
Хм... А как я из таблицы vb_treadread могу определить время прочтения указанной темы именно этим юзером? Там по-моему такого параметра нет. lastpost и dateline - это два столбца даты. Но это не совсем то что надо. Первое это время последнего поста, второе - это... не знаю, мне кажется время создания темы.

Цитата:
Сообщение от Ghost Посмотреть сообщение
...
не учитывать сообщения/темы, созданные/обновленные ранее чем $vbulletin->options['markinglimit'] дней назад - это два.
Ну или если проще, то так:
Код:
SELECT value FROM `vb_setting` WHERE varname='markinglimit'
Это меня пока не интересовало, но за идею спасибо.
  Ответить с цитированием
Старый 30.03.2009, 13:20   #4
Ghost
Гуру
 
Аватар для Ghost
Цитата:
Сообщение от CityCat Посмотреть сообщение
А как я из таблицы vb_treadread могу определить время прочтения указанной темы именно этим юзером?
А что там сложного? Есть три поля userid, threadid и readtime, т.е. id юзера, id темы и время прочтения соответственно.
Цитата:
Сообщение от CityCat Посмотреть сообщение
Это меня пока не интересовало
Зря. Иначе никак. Пометка прочтения темы сохраняется в указанной мной таблице, но информация хранится только для тех тем, время обновления которых больше $vbulletin->options['markinglimit']. Потом метка о прочтении удаляется, чтобы не хранить в БД кучу инфы для каждого пользователя и темы (1000 юзеров , 1000 тем - итого миллион записией в таблице) и уже никак нельзя проверить, читал юзер эту тему или нет.

Если тебе нужен sql-запрос, то будет он выглядеть вроде бы так:
Код:
SELECT thread.*
FROM vb_thread AS thread
LEFT JOIN vb_threadread AS threadread ON(thread.threadid=threadread.threadid AND threadread.userid=1)
WHERE (threadread.userid IS NULL AND ((UNIX_TIMESTAMP()-thread.lastpost)/86400)<=10)
OR (threadread.userid IS NOT NULL AND threadread.readtime<thread.lastpost);
т.е. я объединяю таблицы thread и threadread на основе совпадения threadid и равенства userid указанному значению ID пользователя (в данном случае - 1). "LEFT JOIN" - означает, что если в таблице threadread нет искомой записи, то будут присоеденины три поля NULL. после объединения я выполняю выборку по одному из условий: либо инфа о прочтении не найдена ("threadread.userid IS NULL") и тема обновлялась в течении последних 10 дней ("((UNIX_TIMESTAMP()-thread.lastpost)/86400)<=10" - у меня $vbulletin->options['markinglimit'] равен 10 дням), либо инфа найдена ("threadread.userid IS NOT NULL") и время прочтения темы меньше времени последнего ее обновления ("threadread.readtime<thread.lastpost"). вот как-то так...
Цитата:
Сообщение от CityCat Посмотреть сообщение
SELECT value FROM `vb_setting` WHERE varname='markinglimit'
не стоит выполнять этот запрос, если ты будешь вставлять запрос поиска непрочтенных в какой-либо скрипт форума, а лучше использовать значение переменной - не имеет смысла грузить базу дополнительным запросом для того, чтобы получить уже имеющееся значение.
  Ответить с цитированием
Старый 30.03.2009, 15:12   #5
CityCat
Эксперт
 
Аватар для CityCat
Цитата:
Сообщение от Ghost Посмотреть сообщение
Если тебе нужен sql-запрос, то будет он выглядеть вроде бы так:
Спасибо - то что надо - буду пробовать.
  Ответить с цитированием
Ответ

Закладки

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



 
 

Текущее время: 09:28 25.05.2012. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot