Восстановление порядка сообщений темы в phpmyadmin
Восстановление порядка сообщений темы в phpmyadminПросматривая некоторые темы обнаружил несоответствия времени создания сообщений и порядка
-
Оффлайн
Автор темы
Звание: Легенда
Админ
Сообщений: 2195
Создано тем: 317
Рейтинг: 10
Репа: (245|245|0)
Баллы: 3580
Был: 2024-11-18 08:59
Лайков: 202
Восстановление порядка сообщений темы в phpmyadmin
Просматривая некоторые темы обнаружил несоответствия времени создания сообщений и порядка их расположения.
Это произошло после ручного добавления из старого форума тем и сообщений. Средствами форума переместить на свои места сообщения дело хлопотное да и запутаешься
Вот некоторые темы, где я применил метод ниже...
Логический шрифт
Radialix 3
НАШ ЛОГОТИП и АТРИБУТИКА
----------------------------------------------
А теперь коротко, без картинок и по делу
1. создаем две таблицыCREATE TABLE `smf_messages4` (`id_msg` int(10) UNSIGNED NOT NULL, `id_topic` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', `id_board` smallint(5) UNSIGNED NOT NULL DEFAULT '0', `poster_time` int(10) UNSIGNED NOT NULL DEFAULT '0', `id_member` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', `id_msg_modified` int(10) UNSIGNED NOT NULL DEFAULT '0', `subject` varchar(255) NOT NULL DEFAULT '', `poster_name` varchar(255) NOT NULL DEFAULT '', `poster_email` varchar(255) NOT NULL DEFAULT '', `poster_ip` varbinary(16) DEFAULT NULL, `smileys_enabled` tinyint(4) NOT NULL DEFAULT '1', `modified_time` int(10) UNSIGNED NOT NULL DEFAULT '0', `modified_name` varchar(255) NOT NULL DEFAULT '', `modified_reason` varchar(255) NOT NULL DEFAULT '', `body` mediumtext NOT NULL, `icon` varchar(16) NOT NULL DEFAULT 'xx',`approved` tinyint(4) NOT NULL DEFAULT '1', `likes` smallint(5) UNSIGNED NOT NULL DEFAULT '0', `lock_post` tinyint(4) DEFAULT '0') ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `smf_messages6` (`id_msg` int(10) UNSIGNED NOT NULL, `id_topic` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', `id_board` smallint(5) UNSIGNED NOT NULL DEFAULT '0', `poster_time` int(10) UNSIGNED NOT NULL DEFAULT '0', `id_member` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', `id_msg_modified` int(10) UNSIGNED NOT NULL DEFAULT '0', `subject` varchar(255) NOT NULL DEFAULT '', `poster_name` varchar(255) NOT NULL DEFAULT '', `poster_email` varchar(255) NOT NULL DEFAULT '', `poster_ip` varbinary(16) DEFAULT NULL, `smileys_enabled` tinyint(4) NOT NULL DEFAULT '1', `modified_time` int(10) UNSIGNED NOT NULL DEFAULT '0', `modified_name` varchar(255) NOT NULL DEFAULT '', `modified_reason` varchar(255) NOT NULL DEFAULT '', `body` mediumtext NOT NULL, `icon` varchar(16) NOT NULL DEFAULT 'xx',`approved` tinyint(4) NOT NULL DEFAULT '1', `likes` smallint(5) UNSIGNED NOT NULL DEFAULT '0', `lock_post` tinyint(4) DEFAULT '0') ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. переносим строки темыINSERT INTO `smf_messages4` (`id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post`) SELECT `id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post` FROM smf_messages WHERE id_topic IN (733);
INSERT INTO `smf_messages6` (`id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post`) SELECT `id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post` FROM smf_messages WHERE id_topic IN (733);
3. создаем дополнительные столбцы id_msg2ALTER TABLE smf_messages4 ADD COLUMN id_msg2 TEXT AFTER id_msg; ALTER TABLE smf_messages6 ADD COLUMN id_msg2 TEXT AFTER id_msg;
4. нумеруем id_msg2set @i := 0; update smf_messages4 set id_msg2 = (@i := @i+1 ) order by id_msg; set @i := 0; update smf_messages6 set id_msg = (@i := @i+1 ) order by poster_time;
+++++++++++++++++++++++++++++++++
5. обновляем id_msg2 в smf_messages6UPDATE smf_messages6, smf_messages4 SET smf_messages6.id_msg2 = smf_messages4.id_msg where smf_messages6.id_msg = smf_messages4.id_msg2;
6. нумеруем id_msgset @i := 44440; update smf_messages6 set id_msg = (@i := @i+1 ) order by poster_time;
7. переносим адреса по времени на свое местоUPDATE smf_messages6 SET id_msg=id_msg2 WHERE poster_time;
8. удаляем столбец id_msg2ALTER TABLE smf_messages6 drop COLUMN id_msg2;
9. удаляем темуdelete from smf_messages WHERE id_topic IN (733);
10. переносим в phpmyadmin из таблицы smf_messages6 в таблицу smf_messages ТОЛЬКО ДАННЫЕ
11. всё
++++++++++++++++++++++++++++++++++++++++++Сообщение отредактировал WYLEK 29 января 2023 - 13:5125 февраля 2021 - 13:26 / #1 -
Оффлайн
Автор темы
Звание: Легенда
Админ
Сообщений: 2195
Создано тем: 317
Рейтинг: 10
Репа: (245|245|0)
Баллы: 3580
Был: 2024-11-18 08:59
Лайков: 202
Объединяем темы Поговорим? и Поговорим?0
++++++++++++++++++++
очистка таблиц, если что то пошло не такTRUNCATE TABLE smf_messages0; TRUNCATE TABLE smf_messages1;
++++++++++++++++++++
создание таблицCREATE TABLE `smf_messages0` (`id_msg` int(10) UNSIGNED NOT NULL, `id_topic` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', `id_board` smallint(5) UNSIGNED NOT NULL DEFAULT '0', `poster_time` int(10) UNSIGNED NOT NULL DEFAULT '0', `id_member` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', `id_msg_modified` int(10) UNSIGNED NOT NULL DEFAULT '0', `subject` varchar(255) NOT NULL DEFAULT '', `poster_name` varchar(255) NOT NULL DEFAULT '', `poster_email` varchar(255) NOT NULL DEFAULT '', `poster_ip` varbinary(16) DEFAULT NULL, `smileys_enabled` tinyint(4) NOT NULL DEFAULT '1', `modified_time` int(10) UNSIGNED NOT NULL DEFAULT '0', `modified_name` varchar(255) NOT NULL DEFAULT '', `modified_reason` varchar(255) NOT NULL DEFAULT '', `body` mediumtext NOT NULL, `icon` varchar(16) NOT NULL DEFAULT 'xx',`approved` tinyint(4) NOT NULL DEFAULT '1', `likes` smallint(5) UNSIGNED NOT NULL DEFAULT '0', `lock_post` tinyint(4) DEFAULT '0') ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `smf_messages1` (`id_msg` int(10) UNSIGNED NOT NULL, `id_topic` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', `id_board` smallint(5) UNSIGNED NOT NULL DEFAULT '0', `poster_time` int(10) UNSIGNED NOT NULL DEFAULT '0', `id_member` mediumint(8) UNSIGNED NOT NULL DEFAULT '0', `id_msg_modified` int(10) UNSIGNED NOT NULL DEFAULT '0', `subject` varchar(255) NOT NULL DEFAULT '', `poster_name` varchar(255) NOT NULL DEFAULT '', `poster_email` varchar(255) NOT NULL DEFAULT '', `poster_ip` varbinary(16) DEFAULT NULL, `smileys_enabled` tinyint(4) NOT NULL DEFAULT '1', `modified_time` int(10) UNSIGNED NOT NULL DEFAULT '0', `modified_name` varchar(255) NOT NULL DEFAULT '', `modified_reason` varchar(255) NOT NULL DEFAULT '', `body` mediumtext NOT NULL, `icon` varchar(16) NOT NULL DEFAULT 'xx',`approved` tinyint(4) NOT NULL DEFAULT '1', `likes` smallint(5) UNSIGNED NOT NULL DEFAULT '0', `lock_post` tinyint(4) DEFAULT '0') ENGINE=InnoDB DEFAULT CHARSET=utf8;
+++++++++++++++++++++++++++++++++++
переносим строки тем 25 и 732 в smf_messages0 - эталонINSERT INTO `smf_messages0` (`id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post`) SELECT `id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post` FROM smf_messages WHERE id_topic IN (25);
INSERT INTO `smf_messages0` (`id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post`) SELECT `id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post` FROM smf_messages WHERE id_topic IN (732);
создаем столбец id_msg2, если надо что то поменять напрямуюALTER TABLE smf_messages0 ADD id_msg2 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
нумеруем id_msg2set @i:= 44440; update smf_messages0 set id_msg2 = (@i := @i+1 ) order by id_msg; set @i := 0; update smf_messages0 set id_msg2 = (@i := @i+1 ) order by id_msg;
-------------------------------------------------------
переносим строки тем 25 и 732 в smf_messages1INSERT INTO `smf_messages1` (`id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post`) SELECT `id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post` FROM smf_messages WHERE id_topic IN (25);
INSERT INTO `smf_messages1` (`id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post`) SELECT `id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post` FROM smf_messages WHERE id_topic IN (732);
создаем столбецALTER TABLE smf_messages1 ADD id_msg2 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
нумеруем id_msg2set @i := 44440; update smf_messages1 set id_msg2 = (@i := @i+1 ) order by poster_time; set @i := 0; update smf_messages1 set id_msg2 = (@i := @i+1 ) order by poster_time;
+++++++++++++++++++++++++++++++++++
переносим id_msg на родное местоUPDATE smf_messages1, smf_messages0 SET smf_messages1.id_msg = smf_messages0.id_msg where smf_messages1.id_msg2 = smf_messages0.id_msg2;
---------------------------------
устанавливаем топик и заголовокUPDATE smf_messages1 SET id_topic='25' WHERE id_topic='732'; UPDATE smf_messages1 SET subject='Поговорим?' WHERE subject='Поговорим?0';
удаляем id_msg2ALTER TABLE smf_messages1 drop COLUMN id_msg2;
вставка в таблицу smf_messages - удаляем строки темdelete from smf_messages WHERE id_topic IN (25); delete from smf_messages WHERE id_topic IN (732);
закидываем данные из smf_messages1 на smf_messagesINSERT INTO `smf_messages` (`id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post`) SELECT `id_msg`, `id_topic`, `id_board`, `poster_time`, `id_member`, `id_msg_modified`, `subject`, `poster_name`, `poster_email`, `poster_ip`, `smileys_enabled`, `modified_time`, `modified_name`, `modified_reason`, `body`, `icon`, `approved`, `likes`, `lock_post` FROM smf_messages1 WHERE id_topic IN (25);
Все , пересчитываем все в админке.Сообщение отредактировал WYLEK 29 января 2023 - 13:5117 марта 2021 - 14:44 / #2
Статистика форума, пользователей онлайн: 0 (за последние 20 минут)
---
- Создано тем
- 1197
- Всего сообщений
- 15762
- Пользователей
- 18015
- Новый участник
- HELIUM