avatar_WYLEK

Форумы и модули для SMF Восстановление порядка сообщений темы в phpmyadmin

Автор WYLEK, 25 февраля 2021, 13:26:20

« Конвертер форума SMF на форум PunBB | Конвертер статей для Tinyportal из форума SMF »

WYLEKАвтор темы

Восстановление порядка сообщений темы в phpmyadmin


Просматривая некоторые темы обнаружил несоответствия времени создания сообщений и порядка их расположения.
Это произошло после ручного добавления из старого форума тем и сообщений. Средствами форума переместить на свои места сообщения дело хлопотное да и запутаешься  :bang:

Вот некоторые темы, где я применил метод ниже...

Логический шрифт
Radialix 3
НАШ ЛОГОТИП и АТРИБУТИКА
----------------------------------------------
А теперь коротко, без картинок и по делу :biggrin:

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_msg2

ALTER 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_msg2

set @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_messages6

UPDATE smf_messages6, smf_messages4 
SET smf_messages6.id_msg2 = smf_messages4.id_msg
where smf_messages6.id_msg = smf_messages4.id_msg2;

6. нумеруем id_msg

set @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_msg2

ALTER TABLE smf_messages6 drop COLUMN id_msg2;

9. удаляем тему

delete from smf_messages WHERE id_topic IN (733);

10. переносим в phpmyadmin из таблицы smf_messages6 в таблицу smf_messages ТОЛЬКО ДАННЫЕ

11. всё :ura:
++++++++++++++++++++++++++++++++++++++++++

WYLEKАвтор темы

Объединяем темы Поговорим? и Поговорим?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_msg2

set @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_messages1

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 (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_msg2

set @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_msg2

ALTER 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_messages

INSERT 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);

Все :ura: , пересчитываем все в админке.

* Ваши права на сайте

    Light Portal

  • Вы можете просматривать элементы портала
  • Вы не можете управлять блоками
  • Вы не можете управлять своими страницами
  • Вы не можете размещать свои страницы без модерации

    Simple Machines

  • Вы не можете удалять темы.
  • Вы не можете создавать темы.
  • Вы не можете отвечать на сообщения.
  • Вы не можете прикреплять файлы.
  • Вы не можете изменять свои сообщения.
  • Вы не можете удалять свои сообщения.

Яндекс.Метрика Каталог@MAIL.RU - каталог ресурсов интернет