Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Trotor

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение
05/23/12 15:17 (изменено)

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

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

Изменено пользователем 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

 

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

  • Upvote 2

Поделиться сообщением


Ссылка на сообщение

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

 

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

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение

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

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

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

×
×
  • Создать...