Биллинговая система Nodeny

Главная категория => Nodeny Plus => Тема начата: Tooreagen от 06 Августа 2017, 15:25:43



Название: Объединить две базы
Отправлено: Tooreagen от 06 Августа 2017, 15:25:43
Подскажите как это сделать? Может есть какой-то скрипт?


Название: Re: Объединить две базы
Отправлено: Efendy от 07 Августа 2017, 08:57:08
Можно sql командами. Позже покажу, сейчас в командировке


Название: Re: Объединить две базы
Отправлено: Tooreagen от 07 Августа 2017, 09:18:31
А когда примерно? Нужно дней 10 чтобы было готово, может проще перенести все вручную, у меня там 150 записей в той что перенести нужно.


Название: Re: Объединить две базы
Отправлено: Efendy от 07 Августа 2017, 16:36:10
послезавтра


Название: Re: Объединить две базы
Отправлено: elite от 07 Августа 2017, 22:45:32
так обсуждалось же, правда для н50


Название: Re: Объединить две базы
Отправлено: Efendy от 09 Августа 2017, 11:13:37
В чем суть:

необходимо увеличить id всех пользователей в одной из баз на число, которое превышает максимальный id в другой базе. Допустим в одной базе id от 1 до 100500, а в другой базе id от 1 до 450. Для внимательных: только  что я сказал "максимальный id в другой базе" - все правильно, максимальный id в первой базе не имеет значение. Берем круглое число, которое больше 450 - допустим 1000. Следовательно по итогу у нас должы id из одной базы быть в диапазоне от 1 до 450, в другой от 1000 и выше. Также на это число (1000) необходимо увеличить id юзеров в связанных таблицах (платежи, допданные и т.д).


Итак:

del -  имя первой базы данных (в ней будет итоговый результат)
nodeny - имя второй базы данных
1000 - число, на которое изменяются id в первой базе данных

Выполняем:

Код:
update del.users set name=concat(name, '!'), id=id+1000;
Внимание! Кроме увеличения id, я также к каждому логину добавил восклицательный знак. Это сделано для того, чтобы все прошло успешно, если в разных базах есть одинаковые логины (иначе сработала б защита на уникальность). Если у вас логины гарантированно одинаковые:

Код:
update del.users set id=id+1000;

Внимание! Вам нужно выполнить либо тот либо тот запрос, не оба!

Увеличиваем id юзеров в таблице платежей:

Код:
update del.pays set mid=mid+1000 where mid>0;

В таблице допданных:

Код:
update del.data0 set uid=uid+1000;

В услугах:

Код:
update del.users_services set uid=uid+1000;

Трафик:

Код:
update del.users_trf set uid=uid+1000;

Если есть таблица привязки мак-ов к юзерам:

Код:
update del.mac_uid set uid=uid+1000 WHERE uid>0;


Объедняем даннные:

Код:
insert into del.users (select * from nodeny.users);
insert into del.pays (select * from nodeny.pays);
insert into del.data0 (select * from nodeny.data0);
insert into del.mac_uid (select * from nodeny.mac_uid);
insert into del.users_trf (select * from nodeny.users_trf);

Если услуги (включая id) на обоих базах одинаковые, то просто копируем:

Код:
insert into del.users_services (select * from nodeny.users_services);


Иначе вам нужно В БАЗЕ 2 заапдейтить id услуг так, чтобы они соответствовали услугам в базе 1, например:
Код:
update nodeny.users_services set service_id = 108 where service_id=3;
update nodeny.users_services set service_id = 114 where service_id=2;
update nodeny.users_services set service_id = service_id - 100;

Здесь я заменил услуг айдишники с 3 на 8, с 2 на 14. Обратите внимание на маневр с добавлением и отниманием сотни, это так надо, влом объяснять зачем.

Начните пока с этого.  Посмотрю какие там мелкие нюансы есть и дополню позже