Внешний запрос к базе, количество непрочитанных топиков.

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
SeMs
phpBB 1.0.0
Сообщения: 1
Стаж: 11 лет 8 месяцев

Внешний запрос к базе, количество непрочитанных топиков.

Сообщение SeMs »

я только начал разбираться, прошу не пинать сильно :)
нужен SQL запрос который посчитает количество непрочитанных топиков на определенном форуме, я так понимаю что нужно использовать табличку TOPICS_TRACK в связке с forum_id и user_id, там по идее должны быть записи когда пользователь прочитал определенный топик в определенном форуме, или я ошибаюсь поправте плиз.
но что-то не вяжется, на форуме видно что не прочитано в форумах одно количество а запрос выдает другое.

Вот что у меня получилось, к примеру для 25 форума пользователем Admin.

Код: Выделить всё

   select count(*) from topics pt
 where pt.forum_id = 25
   and pt.topic_id not in (
   select tt.topic_id from users pu,topics_track tt
    where pu.username = 'Admin'
    and tt.user_id = pu.user_id);
Может кто сталкивался с подобным? Помогите разобраться, понимаю что где-то не там копаю но где нужно не пойму.
Последний раз редактировалось Sheer 23.01.2015 8:28, всего редактировалось 1 раз.
Причина: bb-код
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 19 лет 7 месяцев
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2756 раз

Re: Внешний запрос к базе, количество непрочитанных топиков.

Сообщение Sheer »

Используйте "родную" функцию get_unread_topics() (файл ./includes/functions.php)
Входной параметр user_id, возвращает количество непрочитанных топиков.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
cheloveki
phpBB 1.0.0
Сообщения: 6
Стаж: 10 лет 8 месяцев
Благодарил (а): 1 раз

Re: Внешний запрос к базе, количество непрочитанных топиков.

Сообщение cheloveki »

Подскажите как поправить запрос.
Мне нужно сделать "парсинг" 5-ти последних тем на определенном форуме.

Как вытащить темы, я разобрался. Делаю это так

Код: Выделить всё

select * from `phpbb_topics` where forum_id=
(select forum_id from `phpbb_forums` where forum_id=10)
order by topic_time  desc limit 5
А вот как быть с первыми постами? Делаю так:

Код: Выделить всё

select * from `phpbb_posts` where `phpbb_posts`.topic_id=
(select`phpbb_topics`.topic_id from `phpbb_topics` where `phpbb_topics`.forum_id=
(select forum_id from `phpbb_forums` where forum_id=10)
order by `phpbb_topics`.topic_time  desc limit 1)
Если убрать limit 1, то ругается на Subquery returns more than 1 row.

Или я не по правильному пути пошел?
Последний раз редактировалось Sheer 22.03.2016 11:08, всего редактировалось 1 раз.
Причина: bb-код
Аватара пользователя
Sumanai
phpBB 3.0.0 RC5
Сообщения: 1668
Стаж: 11 лет 10 месяцев
Благодарил (а): 267 раз
Поблагодарили: 216 раз

Re: Внешний запрос к базе, количество непрочитанных топиков.

Сообщение Sumanai »

cheloveki писал(а): Или я не по правильному пути пошел?
Да. Почитайте про LEFT JOIN
cheloveki писал(а): (select forum_id from `phpbb_forums` where forum_id=10)
Гениально! Спрашиваем айди форума у БД, предъявляя айди форума.
cheloveki
phpBB 1.0.0
Сообщения: 6
Стаж: 10 лет 8 месяцев
Благодарил (а): 1 раз

Re: Внешний запрос к базе, количество непрочитанных топиков.

Сообщение cheloveki »

Sumanai писал(а): Да. Почитайте про LEFT JOIN
Спасибо за пояснения. Принял к сведению.

Задачу решил так:

Код: Выделить всё

SELECT  DISTINCT `phpbb_posts`.`topic_id`,`phpbb_posts`.`post_subject`,`phpbb_posts`.`post_text`
 FROM  `phpbb_attachments`
 RIGHT OUTER JOIN `phpbb_posts` ON (`phpbb_attachments`.`post_msg_id` = `phpbb_posts`.`post_id`)
 LEFT OUTER JOIN `phpbb_topics` ON (`phpbb_posts`.`topic_id` = `phpbb_topics`.`topic_id`)
WHERE
  `phpbb_topics`.`forum_id` = 10 AND 
  `phpbb_topics`.`topic_type` = 0
ORDER BY
  `phpbb_topics`.`topic_time` DESC limit 5
Последний раз редактировалось Sheer 22.03.2016 11:09, всего редактировалось 1 раз.
Причина: bb-код

Вернуться в «Поддержка phpBB 3.0.х»