Перейти к публикации
View in the app

A better way to browse. Learn more.

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

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

За пару лет существования форума, таблицы 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 нет никакого штатного механизма для удаления переписок между удалёнными пользователями?

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

 

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

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

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

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.