Перейти к контенту

Выборка топ 10 постящих конкретного форума


Рекомендуемые сообщения

Вообщем тема такая. На борде есть спам-форум. Мне нужно выявить самого спамящего именно в нем за последний месяц... Вот сижу никак запрос не организую, может кто даст какой совет? :D
Ссылка на комментарий
Поделиться на других сайтах

$DB->query( "SELECT COUNT(p.pid) as tot_posts, p.topic_id, p.author_name, p.author_id FROM ibf_topics t, ibf_posts p WHERE p.topic_id=t.tid AND t.forum_id='1' AND t.pinned='0' GROUP BY p.author_name ORDER BY tot_posts DESC");

 

Вот вроде такого я сваял правильно ли?

 

Добавлено:

Поясню

 

t.forum_id='1' - ид спам форума

 

t.pinned='0' - чтобы считались только незакрепленные темы

Ссылка на комментарий
Поделиться на других сайтах

Хм... Ну, в принципе, правильно... Так если, по мелочи какие ошибки... Например, надо по идее проверять p.queued=0 и t.approved=1 (это значит, что пост прошёл премодерирование), потом - ты же хочешь за месяц? Тогда нужно ещё в раздел WHERE добавлять post_date > 30*24*3600 или что-то в этом роде... или же использовать в скрипте microtime, чтоб получить именно от начала текущего месяца... Ну и ещё группировать нужно всё же по p.author_id, так надёжней...

 

Добавлено:

В общем, запустил твой запрос у себя - всё сработало. :D

 

ЗЫ

post_date > 30*24*3600
Енто надо будет в скрипте рассчитывать, а в запрос подставлять уже post_date > $date...
Ссылка на комментарий
Поделиться на других сайтах

Я так и сделал =))

 

$time = time() - 2592000;
$DB->query( "SELECT COUNT(p.pid) as tot_posts, p.topic_id, p.author_name, p.author_id, p.post_date FROM ibforumstopics t, ibforumsposts p WHERE p.topic_id=t.tid AND p.post_date > '".$time."' AND t.forum_id='1' AND t.pinned='0' GROUP BY p.author_name ORDER BY tot_posts DESC");

 

Я может и натупил тут, но для первого опыта в SQL наверное сойдет?

Ссылка на комментарий
Поделиться на других сайтах

Советы начинающему скриптописцу: ;)

  • Когда считаешь время, лучше не выпендриваться с рассчётами, а писать просто time - 31*24*3600 (31 день по 24 часа по 3600 секунд в часе). Так меньше вероятность ошибки.
     
  • Разрывать запрос mySQL в случае '".$time."' не обязательно - можно писать прямо внутри кавычек p.post_date > $time. PHP без проблем рендерит переменные прямо в запросах, если они не включают сложных частей типа [] ()
     
  • Если скрипт работает с базой через стандартный драйвер mySQL (sources/Drivers/mySQL.php), то подставлять свои префиксы таблиц необязательно. Можно писать стандартно ibf_topics, ibf_posts - драйвер сам подставит нужные префиксы:
    $the_query = preg_replace("/ibf_(\S+?)([\s\.,]|$)/", $this->obj['sql_tbl_prefix']."\\1\\2", $the_query);


:D

Ссылка на комментарий
Поделиться на других сайтах

1. Понял учту

2. Я знаю это просто осталось наследие от моих попыток ;)

3. И это знаю, просто у меня форум сам это заменил почему то :D

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.