Trotor 27 05/23/12 13:25 За пару лет существования форума, таблицы message_posts, message_topics и message_topic_user_map выросли до гигантского размера - по кол-ву записей превышают даже таблицу posts. Вопрос - каким запросом удалить все старые записи в этих таблицах, скажем тем которым больше полугода? Поделиться сообщением Ссылка на сообщение
siv1987 2628 05/23/12 14:23 Вы собираетесь удалить личную переписку пользователей? Поделиться сообщением Ссылка на сообщение
Trotor 27 05/23/12 15:17 (изменено) Вы собираетесь удалить личную переписку пользователей?Старую. Которой больше года уже. И в большинстве это автописьма от ботов (массовая рассылка). Изменено 23 мая 2012 пользователем Haktar Поделиться сообщением Ссылка на сообщение
siv1987 2628 05/23/12 18:22 Примерно так 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 Перед выполнением лучше иметь бэкап этих таблиц. 2 Поделиться сообщением Ссылка на сообщение
f2065 6 01/25/17 15:23 Тоже вот решил почистить ЛС. Удалил кучу мессаг от роботов таким образом: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 ? Поделиться сообщением Ссылка на сообщение
avtobus 6 01/25/17 21:50 Этот запрос удаляет все переписки от или к удаленным пользователям. Если нужно удалить переписку только между удаленными пользователями и со стороны получателя и со стороны отправителя 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 1 Поделиться сообщением Ссылка на сообщение
f2065 6 01/25/17 22:07 Вот интересно - неужели у IPB нет никакого штатного механизма для удаления переписок между удалёнными пользователями?Посты на форуме - потом может почистить модератор. А кто и как может почистить личные сообщения??? Пользователи ведь временами удаляются. А весь этот мусор в ЛС - остаётся зачем-то в базе.Ну если удалён один из собеседников - допустим ЛС может быть надо для истории второму собеседнику. Но если удалены оба собеседника - зачем оставлять их ЛС??? (не рассматривая ручное копание в БД, штатно ведь даже средства для просмотра чужих ЛС - нету) Ещё какие-то вроде как удалённые ЛС (b_message_topics.mt_is_deleted=1) - тоже в базе зачем-то лежали… Вообще в итоге за 15 лет существования ненужных ЛС было порядка 90%. Поделиться сообщением Ссылка на сообщение
siv1987 2628 01/27/17 22:09 Вот интересно - неужели у IPB нет никакого штатного механизма для удаления переписок между удалёнными пользователями?Штатного нету. штатно ведь даже средства для просмотра чужих ЛС - нетуЧужие ЛС просматривать не этично. На то они и личные сообщения. Поделиться сообщением Ссылка на сообщение