Цитата:
Сообщение от 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'
|
не стоит выполнять этот запрос, если ты будешь вставлять запрос поиска непрочтенных в какой-либо скрипт форума, а лучше использовать значение переменной - не имеет смысла грузить базу дополнительным запросом для того, чтобы получить уже имеющееся значение.