Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Уменьшение таблиц мускула

За пару лет существования форума, таблицы message_posts, message_topics и message_topic_user_map выросли до гигантского размера - по кол-ву записей превышают даже таблицу posts. Вопрос - каким запросом удалить все старые записи в этих таблицах, скажем тем которым больше полугода?

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

Вы собираетесь удалить личную переписку пользователей?

  • Автор

Вы собираетесь удалить личную переписку пользователей?

Старую. Которой больше года уже. И в большинстве это автописьма от ботов (массовая рассылка).

Изменено пользователем Haktar

Примерно так

 

DELETE t.*, p.*, m.*
    FROM ibf_message_topics t, ibf_message_posts p, ibf_message_topic_user_map m 
    WHERE t.mt_date < UNIX_TIMESTAMP('2011-05-23') AND t.mt_id=p.msg_topic_id AND t.mt_id=m.map_topic_id

 

Перед выполнением лучше иметь бэкап этих таблиц.

  • 4 года спустя...

Тоже вот решил почистить ЛС.

 

Удалил кучу мессаг от роботов таким образом:

DELETE t.*, p.*, m.*
FROM b_message_topics t, b_message_posts p, b_message_topic_user_map m
WHERE t.mt_title LIKE 'Уведомление о сообщении в %'
AND t.mt_id=p.msg_topic_id AND t.mt_id=m.map_topic_id;

 

Но вот ещё проблема - куча переписок между давно удалёнными пользователями :blink:

В PM Viewer это выглядит как мессаги от «Гость_ Deleted Member _*» к «Deleted Member».

 

В таблицах b_message_topics смотрел на них… mt_starter_id, mt_to_member_id… указанных там номеров - нету в b_members.

Можно как-то сделать SQL команду для удаления тех строк у которых mt_to_member_id не найден в b_members.member_id ?

Этот запрос удаляет все переписки от или к удаленным пользователям. Если нужно удалить переписку только между удаленными пользователями и со стороны получателя и со стороны отправителя OR заменить на AND.

 

DELETE t.*, p.*, m.* FROM ibf_message_topics t
LEFT JOIN ibf_message_posts p ON t.mt_id=p.msg_topic_id
LEFT JOIN ibf_message_topic_user_map m ON t.mt_id=m.map_topic_id
LEFT JOIN ibf_members mm ON mm.member_id=t.mt_starter_id
LEFT JOIN ibf_members mm2 ON mm2.member_id=t.mt_to_member_id
WHERE mm.member_id IS NULL OR mm2.member_id IS NULL

Вот интересно - неужели у IPB нет никакого штатного механизма для удаления переписок между удалёнными пользователями?

Посты на форуме - потом может почистить модератор.

 

А кто и как может почистить личные сообщения??? Пользователи ведь временами удаляются. А весь этот мусор в ЛС - остаётся зачем-то в базе.

Ну если удалён один из собеседников - допустим ЛС может быть надо для истории второму собеседнику. Но если удалены оба собеседника - зачем оставлять их ЛС???

 

(не рассматривая ручное копание в БД, штатно ведь даже средства для просмотра чужих ЛС - нету)

 

Ещё какие-то вроде как удалённые ЛС (b_message_topics.mt_is_deleted=1) - тоже в базе зачем-то лежали… Вообще в итоге за 15 лет существования ненужных ЛС было порядка 90%.

Вот интересно - неужели у IPB нет никакого штатного механизма для удаления переписок между удалёнными пользователями?

Штатного нету.

 

штатно ведь даже средства для просмотра чужих ЛС - нету

Чужие ЛС просматривать не этично. На то они и личные сообщения.

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.