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

Восстановление порядка сообщений темы в phpmyadminПросматривая некоторые темы обнаружил несоответствия времени создания сообщений и порядка
  1. Оффлайн

    Автор темы

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2178

    Создано тем: 315

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3400

    Был: 2024-04-08 16:00

    Лайков: 196

    Восстановление порядка сообщений темы в 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 29 января 2023 - 13:51

    25 февраля 2021 - 13:26 / #1
  2. Оффлайн

    Автор темы

    WYLEK

    Звание: Легенда

    Админ

    Сообщений: 2178

    Создано тем: 315

    Рейтинг: 10

    Репа: (245|245|0)

    Баллы: 3400

    Был: 2024-04-08 16:00

    Лайков: 196

    Объединяем темы Поговорим? и Поговорим?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, пересчитываем все в админке.
    Сообщение отредактировал WYLEK 29 января 2023 - 13:51

    17 марта 2021 - 14:44 / #2

Статистика форума, пользователей онлайн: 1 (за последние 20 минут)

Создано тем
1173
Всего сообщений
15313
Пользователей
17845
Новый участник
van_gal