Перенос раздела с одного форума на другой. - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

sql запросы перенос тем

  • 2 Страниц +
  • 1
  • 2

Перенос раздела с одного форума на другой.

#1 Пользователь не на сайте   Атаман ответил: »

 
 
  • Advanced
  • Смотреть блог
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 152
  • Регистрация: 13-Апрель 12
  • Репутация: 327
  • Откуда:no
  • IPB version:1.x
 

Отправлено 08 Август 2013 - 21:59

Мой хороший знакомый просит перенести с существующего форума целый раздел на новый форум.

В нем тем 300, а постов я даже не подсчитаю сколько).

Как перенести тему и посты я знаю, каждая тема, а потом привязка к ней постов-это все в ручную, но через чур долго.

1) Нужно перенести раздел и все темы его
2) По возможности как-то переименовать авторов на другой ID, чтоб не было слово ГОСТЬ.

Есть ли экспорт сторонний?.
0

#2 Пользователь не на сайте   tasker ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 145
  • Регистрация: 01-Август 13
  • Репутация: 12
  • IPB version:3.4.x
 

Отправлено 08 Август 2013 - 22:15

Не изучал структуру БД особо. ID тем и постов сами увеличиваются при вставке записей в таблицы? Тогда ничего сложного, экспорт в файл и в select вписать ID пользователя с его форума, под которым потом сообщения и темы появятся.

У себя переделывал все темы и стартовые посты тем с одного пользователя на другого, чисто через sql. Там не только id пользователя нужны, ещё имена местами.
1

#3 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 574
  • Регистрация: 15-Октябрь 11
  • Репутация: 152
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 08 Август 2013 - 22:20

Готовых скриптов таких нет, скорее всего. Но написать не сложно под конкретную задачу.

P.S. Вложение  sedito_conv.zip (3,96К)
Количество загрузок: 9 Можете вот это адаптировать для своих целей.
1

#4 Пользователь не на сайте   Атаман ответил: »

 
 
  • Advanced
  • Смотреть блог
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 152
  • Регистрация: 13-Апрель 12
  • Репутация: 327
  • Откуда:no
  • IPB version:1.x
 

Отправлено 08 Август 2013 - 22:41

Спасибо. Это ты только-что создал скрипты?
0

#5 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 574
  • Регистрация: 15-Октябрь 11
  • Репутация: 152
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 08 Август 2013 - 22:43

Нет, это я переносил форум с движка Sedito. На самом деле, там еще куча правок в теле сообщений была, бб-кодов одних два десятка, смайлов не считано...

P.S. Еще разницу в структуре таблиц разных версий учитывать нужно, переносил на 3.3.4 ещё.
0

#6 Пользователь не на сайте   tasker ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 145
  • Регистрация: 01-Август 13
  • Репутация: 12
  • IPB version:3.4.x
 

Отправлено 08 Август 2013 - 22:59

ТС, завтра в рабочее время по МСК смогу помочь. sql-запрос родим. Два. Один для тем, а второй для постов.
0

#7 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 735
  • Регистрация: 20-Март 09
  • Репутация: 2 273
  • IPB version:3.1.x
 

Отправлено 08 Август 2013 - 23:02

Можно через конвертер ипс перенести раздел, но там тоже немало ебалы.

Самый простой вариант который приходит мне в голову:
1. Создаем две пустые таблицы топиков и постов. Форумов я думаю не нужно, если в разделе нет других форумов.
CREATE TABLE new_topics LIKE "ibf_topics";
CREATE TABLE new_posts LIKE "ibf_topics";

2. Копируем туда темы и сообщения из нужного нам раздела
INSERT INTO new_topics SELECT * FROM ibf_topics WHERE forum_id IN (ид_форума);
INSERT INTO new_posts SELECT p.* FROM ibf_posts p INNER JOIN ibf_topics t ON t.tid=p.topic_id WHERE t.forum_id IN (ид_форума);

3. Создаем новое поле в экспортируемой таблице топиков - old_tid. Дублируем туда ид топиков
ALTER TABLE new_topics ADD COLUMN old_tid int(10) NOT NULL DEFAULT '0';
UPDATE new_topics SET old_tid=tid;

ALTER TABLE new_posts ADD COLUMN old_post tinyint(1) NOT NULL DEFAULT '0';
UPDATE new_posts SET old_post=1;

В базе куда будем переносить раздел нужно выполнить следующие запросы:
ALTER TABLE ibf_topics ADD COLUMN old_tid int(10) NOT NULL DEFAULT '0';
ALTER TABLE ibf_posts ADD COLUMN old_post tinyint(1) NOT NULL DEFAULT '0';

4. Удаляем первичные ключи из таблиц new_topics и new_posts, и удаляем айдишники (в новой базе они будут новые).
ALTER TABLE new_topics DROP PRIMARY KEY;
ALTER TABLE new_posts DROP PRIMARY KEY;

ALTER TABLE new_topics CHANGE COLUMN `tid` `tid` int(10) DEFAULT null;
ALTER TABLE new_posts CHANGE COLUMN `pid` `pid` int(10) DEFAULT null;

UPDATE new_topics SET tid=NULL;
UPDATE new_posts SET pid=NULL;

5. Экспортируем таблицы new_topics и new_posts.

6. Импортируем таблицы в новом форуме. Копируем данные из них в рабочие таблицы форума.
INSERT INTO ibf_topics SELECT * FROM new_topics;
INSERT INTO ibf_posts SELECT * FROM new_posts;

7. Обновляем данные ид тем в таблице ibf_posts
UPDATE ibf_posts p INNER JOIN ibf_topics t ON (t.old_tid=p.topic_id AND p.old_post=1) SET p.topic_id=t.tid;

Дальше идет обыкновенный пересчет статистики. Что запросами, что стандартными функциями пересчета. Отсюда уже будет гораздо проще.
По полному завершению переноса, в конце можно удалить две ненужные поля из ibf_topics И ibf_posts
ALTER TABLE ibf_topics DROP COLUMN old_tid;
ALTER TABLE ibf_posts DROP COLUMN old_post;

Вообщем это самый простой и быстрый способ который мне пришел на ум. :)
Вроде ничего не забыл...
0

#8 Пользователь не на сайте   tasker ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 145
  • Регистрация: 01-Август 13
  • Репутация: 12
  • IPB version:3.4.x
 

Отправлено 09 Август 2013 - 06:09

siv1987, ИМХО, очень сложно. И не выполнена просьба автора по замене автора тем и сообщений. А без этого смысл какой в пересчёте?
0

#9 Пользователь не на сайте   Атаман ответил: »

 
 
  • Advanced
  • Смотреть блог
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 152
  • Регистрация: 13-Апрель 12
  • Репутация: 327
  • Откуда:no
  • IPB version:1.x
 

Отправлено 09 Август 2013 - 09:40

Таскер спасибо, я в первом посту написал, что я знаю как тему - пост перенести и тд, но мне нужно глобально все перетащить. Мне за 1 раз нужно 300 тем и 30000 постов.
0

#10 Пользователь не на сайте   Атаман ответил: »

 
 
  • Advanced
  • Смотреть блог
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 152
  • Регистрация: 13-Апрель 12
  • Репутация: 327
  • Откуда:no
  • IPB version:1.x
 

Отправлено 09 Август 2013 - 09:41

Сив спасибо, я случайно мин поставил. Кнопочки малые очень.

Спасибо всем за советы. Дмитрий - Таскер спасибо Вам.

Понравился метод Сива, буду пробовать.
0

#11 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 574
  • Регистрация: 15-Октябрь 11
  • Репутация: 152
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 09 Август 2013 - 11:36

А помоему - скриптом проще. Вытаскиваете два массива из базы - топики принадлежащие нужному форуму и посты относящиеся к этим топикам. Останется только назначить им правильные иденты ( что нибудь типа "range([max tid в таблице ibf_topics + 1], [max tid в таблице ibf_topics + 1] + count($topics))" ), добавить в массивы свои данные пользователя и форума, и записать в базу...
0

#12 Пользователь не на сайте   tasker ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 145
  • Регистрация: 01-Август 13
  • Репутация: 12
  • IPB version:3.4.x
 

Отправлено 09 Август 2013 - 11:40

Dmitriy427, а соответствие между массивами как? Ведь ID темы в массиве сообщений должен соответствовать ID темы в массиве тем.
0

#13 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 574
  • Регистрация: 15-Октябрь 11
  • Репутация: 152
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 09 Август 2013 - 12:09

Просмотреть сообщениеtasker 09 Август 2013 - 11:40 сказал(а):

Dmitriy427, а соответствие между массивами как? Ведь ID темы в массиве сообщений должен соответствовать ID темы в массиве тем.

Условиями во вложенном цикле все делается. То есть, массив сообщений обрабатывается в цикле размещенном внутри цикла обрабатывающего темы. Оно не так сложно выглядит в коде, как тут в описании, на самом деле. :).

P.S. Ну, вот например:
$tid = n1; // max tid + 1
$pid = n2; // max pid + 1
foreach ($topics as $key => $topic) {
	$t_array[$key] = $topic;
	$t_array['tid'][$key] = $tid;
	foreach ($posts as $k => $post) {
		if ($post['topic_id'] == $topics['tid'][$key]) {
			$p_array[$k] = $post;
			$p_array['pid'][$k] = $pid;
			$p_array['topic_id'][$k] = $tid;
			$pid++;
		}
	}
	$tid++;
}

0

#14 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 735
  • Регистрация: 20-Март 09
  • Репутация: 2 273
  • IPB version:3.1.x
 

Отправлено 09 Август 2013 - 17:20

Просмотреть сообщениеtasker 09 Август 2013 - 06:09 сказал(а):

siv1987, ИМХО, очень сложно. И не выполнена просьба автора по замене автора тем и сообщений. А без этого смысл какой в пересчёте?

На первый взгляд. На самом деле ничего сложного нет, только выполнять запросы. Экспортировать таблицы и также потом выполнить пару запросов. И замена авторов это тоже все легко делается запросами - удаляется author_id, и заменяются имена пользователей.
Смысл в пересчете чтобы обновить статистику форумов.

Преимущество перед скриптом в том что не надо ничего отлаживать, не нужно писать гору кода - хотя задача и выглядит просто, но по нормальному сначала нужно записать тему в бд, получить ее last_insert_id, присвоить его постам и записать их базу. Базы должны быть на одном акаунте, а вдруг там 100500 тем и столько же сообщений?
Лично мне в данном случае проще было работать базой и запросами, тем более когда они на разных серверах.
0

#15 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 574
  • Регистрация: 15-Октябрь 11
  • Репутация: 152
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 09 Август 2013 - 20:33

Просмотреть сообщениеsiv1987 09 Август 2013 - 17:20 сказал(а):

Преимущество перед скриптом в том...

Ну, регулярки то там все равно понадобятся. Не встречал пока двух форумов, сколько нибудь поживших, с абсолютно одинаковыми наборами смайлов и бб-кодов, не говоря уже о внутренних ссылках (на сообщения внутри топика часто встречаются например). А значит скрипту альтернативы не будет.

И в поставленной тут задаче регулярки нужно будет применять прямо в скрипте переноса, видимо. Что бы иметь возможность сопоставить иденты сообщений и топиков в исходном и результирующем массивах. Или создавать поля old_tid, old_pid, как в вашем варианте, да.
0

Сообщить об этой теме:


  • 2 Страниц +
  • 1
  • 2


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна