Биллинговая система Nodeny
25 Ноября 2024, 15:09:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Как добавить вручную мак через sql?  (Прочитано 6501 раз)
whix
Новичок
*

Карма: 0
Offline Offline

Сообщений: 3


Просмотр профиля
« : 14 Октября 2012, 21:01:41 »

Пдскажите плиз, как через sql добавить вручную мак адрес в доп поле?
Через dopdata или dopvalues лучше?
И откуда взять значение ревизии
Скрипт на баше
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #1 : 14 Октября 2012, 21:06:41 »

через dopvalues
dopdata это view

50.33, от 50.32 вроде как отличается как раз свойствами ревизий.
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #2 : 15 Октября 2012, 14:21:03 »

вот кстати нашел by Efendy

Цитировать
Ревизия должна быть уникальна не только в пределах одного юзера, а для всех клиентов. В самом NoDeny номер ревизии формируется таким образом: в dopvalues вставляется пустая запись (parent_id=0). Mysql после вставки возвращает last_insert_id, который берется из поля line_id - это и есть номер ревизии. С этим номером вставляются все данные для текущего клиента, удаляется пустая запись. Такая схема используется для того, чтобы гарантировать уникальность ревизии т.к. если сделать select max(revision)+1, а потом делать Insert, то если параллельно какой-либо админ сделает ту же самую операцию, то с некоторой вероятностью мог бы возникнуть конфликт ревизий.

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

Важно. Схема с ревизиями замедляет работу, поэтому в 49.33 и 50.33 ревизий нет в dopvalues, т.е в этой таблице всегда актуальные значения. А ревизии хранятся в другой таблице, которая нужна чисто для  history. 50.32 и 50.33 практически только этим и отличаются
Записан
whix
Новичок
*

Карма: 0
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #3 : 17 Октября 2012, 09:26:48 »

Спасибо, но так мне понял, как ревизию сделать
Версия 50.19 еще
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #4 : 17 Октября 2012, 11:15:52 »

Код:
sub insert_dd{
        my %dopdata = %{$_[0]};
        &sql_do($dbh,"INSERT INTO dopvalues SET parent_id=0,time=0") > 0 && do{
                $rev = $dbh->{'mysql_insertid'};
                &sql_do($dbh,"DELETE FROM dopvalues WHERE line_id=$rev AND parent_id=0 AND time=0");
        };
        $rev or return 0;
        &sql_do($dbh,"INSERT INTO dopvalues VALUES ".join(',',map{
                "(NULL,$nd_id,$_,$dopdata{$_},0,unix_timestamp(),$rev)";
        } keys %dopdata));
}
пример использования:
Код:
&insert_dd({
        4 => '00:11:22:33:44:55'
});
4 - ID поля допданных с алиасом '_mac' по умолчанию.
Данная ф-я вставляет данные в допполя, и если во входных параметрах будет только поле 4, то, в результате, все остальные данные шаблона, в котором находится поле 4 уйдут в историю, т.е. станут неактуальными.
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #5 : 17 Октября 2012, 11:48:08 »

на PHP я делал так:
$id и $mac передаются как локальные переменные в функцию
правда adminid не учитывается

Код:
mysql_query("INSERT INTO dopvalues SET parent_id=0");
$new_rev=mysql_insert_id();
mysql_query("INSERT INTO dopvalues SELECT NULL,'$uid',id,'$mac',0,UNIX_TIMESTAMP(),'$new_rev' FROM dopfields WHERE field_alias='_mac' LIMIT 1");
mysql_query("DELETE FROM dopvalues WHERE line_id=$new_rev AND parent_id=0");
Записан
whix
Новичок
*

Карма: 0
Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #6 : 17 Октября 2012, 14:09:09 »

Спасибо, получилось!
Записан
stix
NoDeny
Спец
*

Карма: 72
Offline Offline

Сообщений: 1872


Nodeny Support Team

205539
Просмотр профиля
« Ответ #7 : 27 Февраля 2013, 11:32:54 »

на всякий случай напишу.
при такой вставке в новую ревизию добавится только мак, если были старые значения, они в новую ревизию не перейдут. а останутся в старой.
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!