Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Pekkonen

Объединение двух версий одного форума

Recommended Posts

Всем привет!

 

Есть форум на IPB 3.4.8, в котором из-за сбоев хостинга пришлось временно откатиться на бекап.

 

В результате сейчас имеем 2 версии форума - грубо с 2010 по 2015 год и с 2012 по 2016 год.

Хочется слить данные в один форум, но при использовании стандартного IP.Board Merge Tool из IPB Converters объединение происходит, но после этого часть данных дублируются (с 2010 по 2012 год)...

Форумы, посты, персональные сообщения и т.п. (

 

Можно ли избежать этого каким то образом?

 

Или в данном случае делать объединение только вручную, без использования средств форума?

 

Ну или на крайний случай вручную удалить из одного форума всю лишнюю информацию, т.е. оставив 2 непересекающихся по времени форума.

 

Заранее спасибо.

Share this post


Link to post
Share on other sites

Не совсем понятно каким образом дублируются данные с 2010 по 2012, если дублироваться под идее должны с 2012 по 2015, те годы которые пересекаются в двух базах. Если базы не отдельных ветвей тогда оставить с 2012 по 2016, остальное перенести вручную (режим INSERT IGNORE), либо удалить пересекающиеся данные и воспользоваться тем же самым IP.Board Merge Tool

Share this post


Link to post
Share on other sites

Благодарю за ответ!

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

А потом идут темы с одинаковыми ID, но абсолютно разные по сути...

С постами аналогичная ситуация (

 

остальное перенести вручную (режим INSERT IGNORE)

Это режим чего именно?

Share this post


Link to post
Share on other sites

А потом идут темы с одинаковыми ID, но абсолютно разные по сути...

Значит это ветви одной когда-то общей базы, ид одинаковые но развивались они от определенного момента по разному. В таком случае INSERT IGNORE не подойдет, нужно удалить данные которые пересекаются и объединить форум в один через Merge Tool. При объединении старые ид потеряются.

Share this post


Link to post
Share on other sites

Так при удалении данных которые пересекаются часть данных и потеряются (

Пока пробую руками через mysql перенести юзеров, темы и посты.

При этом изменив ID дублирующихся элементов (темы и топики) чтобы избежать потери данных.

После этого буду пробовать пересчитать глобальную статистику и посмотрю что будет на выходе.

Но чувствую что это может быть не самый правильный вариант переноса, поэтому и завел эту тему.

Share this post


Link to post
Share on other sites

Это режим чего именно?

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

Share this post


Link to post
Share on other sites

Так руками это всё делать или есть более простой способ внутри самого форума?

В Merge Tool не увидел подходящих для этого настроек

Share this post


Link to post
Share on other sites

Так при удалении данных которые пересекаются часть данных и потеряются (

Вы объединяете не только по ид, но и по другим полям которые могут служить для идентификации записи, например в таблице members по полю name. Если оно совпадает и в первый и другой бд, тогда с большой долью вероятности это один и тот же пользователь, если нет - тогда пользователи разные.

 

Ид которые пересекаются и имеют имеют одинаковые значения

SELECT m.member_id, m.name FROM db.ibf_members m INNER JOIN db2.ibf_members z ON (z.member_id = m.member_id) WHERE z.name=m.name

Ид которые пересекаются но не соответствуют друг другу

SELECT m.member_id, m.name, z.name as z_name FROM db.ibf_members m INNER JOIN db2.ibf_members z ON (z.member_id = m.member_id) WHERE z.name != m.name

Share this post


Link to post
Share on other sites

Так руками это всё делать или есть более простой способ внутри самого форума?

Удалять руками (sql запросами). Объединять уже доступными утилитами для объединения двух разных форумов.

Вручную перенести можно только написав свой скрипт для переноса. Там много связей, руками переносить каждую запись явно не вариант.

Share this post


Link to post
Share on other sites

Спасибо, но вчера при попытке объединения через Merge Tool получил на выходе полное дублирование всех форумов, хотя они и имели полностью идентичные значения по ID и по названию...

Объединять уже доступными утилитами для объединения двух разных форумов. 

Извините, но всё равно не понял как эта утилита сможет объединить следующее:

 

Форум1

Тема1 (ID=10)

Пост1 (ID=1000)

Пост10 (ID=1010)

 

Форум2

Тема1 (ID=10)

Пост11 (ID=1010)

Пост12 (ID=1012)

 

Ведь в итоговый форум должно попасть всё!

Форум

Тема1 (ID=10)

Пост1 (ID=1000)

Пост10 (ID=1010)

Пост11 (ID=1010)

Пост12 (ID=1012)

Share this post


Link to post
Share on other sites

Ид которые пересекаются и имеют имеют одинаковые значения

Те которые пересекаются и имеют одинаковые значения удаляются примерно таким sql запросам

 

DELETE m2.*, pp2.*, pc2.* 
FROM db2.ibf_members m2 
INNER JOIN db.ibf_members m ON (m.member_id=m2.member_id AND m.name=m2.name) 
LEFT JOIN db2.ibf_profile_portal pp2 ON (pp2.pp_member_id=m2.member_id) 
LEFT JOIN db2.ibf_pfields_content pc2 ON (pc2.member_id=m2.member_id)

db - имя базы данных с которой идет сравнение

db2 - имя бд откуда будут удаляться данные.

ibf_ - префикс таблиц.

 

Перед удалением, желательно DELETE заменить на SELECT и проверить какие данные будут удаляться.

Share this post


Link to post
Share on other sites

Спасибо, но вчера при попытке объединения через Merge Tool получил на выходе полное дублирование всех форумов, хотя они и имели полностью идентичные значения по ID и по названию...

Объединять уже доступными утилитами для объединения двух разных форумов. 

Извините, но всё равно не понял как эта утилита сможет объединить следующее (все посты уникальные):

 

Форум1

Тема1 (ID=10)

Пост1 (ID=1000)

Пост10 (ID=1010)

 

Форум2

Тема1 (ID=10)

Пост11 (ID=1010)

Пост12 (ID=1012)

 

Ведь в итоговый форум должно попасть всё!

Форум

Тема1 (ID=10)

Пост1 (ID=1000)

Пост10 (ID=1010)

Пост11 (ID=1020 - уже с новым ID видимо)

Пост12 (ID=1022 - уже с новым ID видимо)

Share this post


Link to post
Share on other sites

Спасибо, но вчера при попытке объединения через Merge Tool получил на выходе полное дублирование всех форумов, хотя они и имели полностью идентичные значения по ID и по названию...

Поэтому их предварительно нужно удалить.

 

Извините, но всё равно не понял как эта утилита сможет объединить следующее:

Форум 1

Тема1 - 1

Тема2 - 2

Тема3 - 3

 

Форум 2

Тема1 - 1

Тема5 - 2

Тема6 - 3

 

----

Итоговой форум

Тема1 - 1 (Форум 2.Тема1 предварительно нужно удалить)

Тема2 - 2

Тема3 - 3

Тема5 - 4

Тема6 - 5

Share this post


Link to post
Share on other sites

Хорошо, если опираться на ваш пример, то удалить просто так Тему1 из Форума1 я не могу, т.к. в ней частично есть нужные посты (

Поэтому и пишу, что то же самое похоже придется делать уже на уровне постов, а не только Тем... (

Share this post


Link to post
Share on other sites
Поэтому и пишу, что то же самое похоже придется делать уже на уровне постов, а не только Тем... (

То же самое нужно делать для всех сущностей - тем, сообщений, пользователей и тп. Другой вопрос как конвертер перенесет сообщения из несуществующей темы.

 

Можно также тупо объединить, потом удалить дублирующиеся значения SQL запросами.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...