Elisium
NoDeny
Старожил
Карма: 19
Offline
Сообщений: 360
На форумах "спасибом" называется плюс к карме.
|
|
« : 28 Февраля 2012, 17:00:56 » |
|
Доброго дня. Биллинг 50.32
Хочется странного, но нужного. Первое: В карточке юзера есть поле "Контракт". Хочется сделать это поле автоинкрементным и начать его, например, с 010000. При создании нового пользователя в этом поле должен отображаться номер его, так называемого, "контракта". Грубо говоря, это просто автоинкрементное число, добавляемое каждому юзеру. А у существующих пользователей этот самый номер нужно проставить. Второе: На странице пользователя вместо персонального платежнего кода нужно выводить номер этого самого контракта в формате 6 цифр.
Кто нибуть подскажет чтото по данным вопросам ?
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #1 : 28 Февраля 2012, 17:10:34 » |
|
Пойдет, если контракт будет = id?
|
|
|
Записан
|
|
|
|
Elisium
NoDeny
Старожил
Карма: 19
Offline
Сообщений: 360
На форумах "спасибом" называется плюс к карме.
|
|
« Ответ #2 : 28 Февраля 2012, 18:39:26 » |
|
Хм.. Как всегда ... "Не спеши выполнять приказы, их в любой момент могут отменить" (с)
Оказывается, этот весь гемморой нужен был для подготовки (??) к обьединению двух биллингов ... Настоящая задача такова: в первом биллинге оставить ид юзеров от 1 до 010000, а во втором сделать эти же самые с 010001 до 020000. При чем, само собой, скорректировать все платежи итд во втором биллинге.
Правильно ли я понимаю, что на втором биллинге нужно сделать следующее (теоретически): 1. Экспортировать таблицу Users, поправить в ней автоинкрементное поле id на 010001 2. Импортировать ее обратно. 3. В таблице Pays ко всем платежам, где есть ид юзера, добавить 010000.
Как то так ? ))) Нужно ли еще где нибуть исправлять данные значения ?
|
|
« Последнее редактирование: 28 Февраля 2012, 18:41:25 от Elisium »
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #3 : 28 Февраля 2012, 18:58:17 » |
|
На 2м биллинге: update users set id=id+10000; алиасы: update users set mid=mid+10000 where mid>0;
экспортировать в файл, изменить имя на temp_users, залить на 1й и выполнить:
insert into users select * from temp_users; drop table temp_users;
На 2м:
update pays set mid=mid+10000 where mid>0; id записей (не клиентов) в таблице платежей не должны пересекаться с id в 1м биллинге update pays set id=id+10000;
залить на 1й аналогичным способом.
тоже с users_trf.
В dopvalues надо грохнуть все неактуальные ревизии, потом parent_id=parent_id+10000 where dopfield_id in(select id from dopfields where parent_type=0); (подзапрос нужен чтобы не затронуть оборудование)
-----
По таблице pays для некоторых (влом искать) типов платежей не будет сходится _неключевая_ инфа, например ссылка на отредактированную запись будет не соответствовать т.к. id (не юзерские) строк изменились.
Ну еще нужно разрулить группы клиентов, если нужно чтоб новые были в новых, то заранее заапдейтить grp в users и в таблице user_grp
|
|
|
Записан
|
|
|
|
poxy.
NoDeny
Спец
Карма: 10
Offline
Сообщений: 844
|
|
« Ответ #4 : 28 Февраля 2012, 20:10:36 » |
|
To Efendy Что поправить для id=номер контракта=ппк? Я так понимаю исправление будет sql-запросом, что исправить для автоматического заполнения поля "контракт" и работы всего алгоритма (отталкиваясь от id автоматом вбить все остальное) в целом? PS или много захотелось
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #5 : 28 Февраля 2012, 21:28:29 » |
|
To Efendy Что поправить для id=номер контракта=ппк? Я так понимаю исправление будет sql-запросом, что исправить для автоматического заполнения поля "контракт" и работы всего алгоритма (отталкиваясь от id автоматом вбить все остальное) в целом? PS или много захотелось UPDATE users SET contract = RIGHT(CONCAT('00000', id), 6); А id = ППК это как? ППК - это избыточная информация, специально для защиты от ошибок, оно получается по формуле из id.
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #6 : 28 Февраля 2012, 21:40:45 » |
|
Самый простой способ получить ППК:
SELECT id, CONCAT(id,RIGHT(SUBSTRING(id,1,1)+SUBSTRING(id,2,1)+SUBSTRING(id,3,1)+SUBSTRING(id,4,1),1)) AS ppk FROM users;
|
|
|
Записан
|
|
|
|
Elisium
NoDeny
Старожил
Карма: 19
Offline
Сообщений: 360
На форумах "спасибом" называется плюс к карме.
|
|
« Ответ #7 : 28 Февраля 2012, 22:07:14 » |
|
На 2м биллинге: ... Ого... Многовасто ) Спасибо, будем пробовать.
|
|
|
Записан
|
|
|
|
poxy.
NoDeny
Спец
Карма: 10
Offline
Сообщений: 844
|
|
« Ответ #8 : 29 Февраля 2012, 11:47:16 » |
|
Да с ппк тупанул , спасибо. А что поправить чтоб в дальнейшем завел юзера и его id сразу вносилось в поле контракт?
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #9 : 29 Февраля 2012, 12:07:02 » |
|
Да с ппк тупанул , спасибо. А что поправить чтоб в дальнейшем завел юзера и его id сразу вносилось в поле контракт? в adduser.pl после $id=$sth->{mysql_insertid} || $sth->{insertid}; $mId=$mid || $id; # id основной записи добавить: sql_do($dbh,"UPDATE users SET contract=id WHERE id=$mId");
|
|
|
Записан
|
|
|
|
poxy.
NoDeny
Спец
Карма: 10
Offline
Сообщений: 844
|
|
« Ответ #10 : 01 Марта 2012, 10:31:11 » |
|
Спасибо! Не сочти за наглость, но мы думали, думали и решили чтоб было Контракт=ППК. Подскажи запрос для обновления поля контракт у всех и что добавить чтоб забивалось автоматом при заведении юзера. Заранее Спасибо!
|
|
|
Записан
|
|
|
|
poxy.
NoDeny
Спец
Карма: 10
Offline
Сообщений: 844
|
|
« Ответ #11 : 01 Марта 2012, 15:01:41 » |
|
Так пойдет :
в adduser.pl после
$id=$sth->{mysql_insertid} || $sth->{insertid}; $mId=$mid || $id; # id основной записи
добавить:
sql_do($dbh,"UPDATE users SET contract=id WHERE id=$mppk"); ?
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #12 : 01 Марта 2012, 16:11:44 » |
|
$mppk = 0; $mppk += $_ foreach split //,$mId; $mppk %= 10; $mppk = $mId.$mppk;
|
|
|
Записан
|
|
|
|
poxy.
NoDeny
Спец
Карма: 10
Offline
Сообщений: 844
|
|
« Ответ #13 : 02 Марта 2012, 00:01:03 » |
|
$mppk = 0; $mppk += $_ foreach split //,$mId; $mppk %= 10; $mppk = $mId.$mppk;
Может сонный уже, чет не пойму куда это вставить? В перле пока не силен...
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #14 : 02 Марта 2012, 01:52:10 » |
|
$id=$sth->{mysql_insertid} || $sth->{insertid}; $mId=$mid || $id; # id основной записи
добавить:
$mppk = 0; $mppk += $_ foreach split //,$mId; $mppk %= 10; $mppk = $mId.$mppk; sql_do($dbh,"UPDATE users SET contract=$mppk WHERE id=$mId");
|
|
|
Записан
|
|
|
|
|