Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Haktar

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Edited by Haktar

Share this post


Link to post
Share on other sites

Примерно так

 

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

Share this post


Link to post
Share on other sites

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

 

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

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 ?

Share this post


Link to post
Share on other sites

Этот запрос удаляет все переписки от или к удаленным пользователям. Если нужно удалить переписку только между удаленными пользователями и со стороны получателя и со стороны отправителя 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

Share this post


Link to post
Share on other sites

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

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

 

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

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...