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

Главная категория => Nodeny 50 => Тема начата: goletsa от 14 Октября 2009, 07:30:00



Название: Модификация старых скриптов под новую версию билинга
Отправлено: goletsa от 14 Октября 2009, 07:30:00
Возникла небольшая проблемка при обновлении билинга.
Не получается сконструировать запрос чтобы забирать маки модемов из дополнительных полей...

Раньше было так:
Код:
 "SELECT `name`,`ip`,`adress`,`paket` FROM `users` WHERE `grp` IN (2,10)";
где adress содержал маки разделенные |

Сейчас маки вынес в отдельные поля ( _mac_modem, _mac_pc).

Ближайшее что получилось это:
Код:
SELECT users.id,users.name,users.ip,users.paket,dopdata.field_value AS mac_modem,dopdata.revision
  FROM users,dopdata WHERE dopdata.parent_id=users.id AND dopdata.template_num=1
  AND dopdata.field_alias='_mac_modem' AND users.grp IN (2,10) ORDER BY dopdata.revision
И такой же запрос для запрос для мака компьютера...

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


Название: Re: Модификация старых скриптов под новую версию билинга
Отправлено: blackjack от 14 Октября 2009, 10:05:30
примерно вот так, это будет  последняя ревизия
Код:
$sql="SELECT * FROM dopdata WHERE revision=(SELECT MAX(revision) FROM dopdata 
WHERE parent_id=$Mid AND template_num='$template_num')";


Название: Re: Модификация старых скриптов под новую версию билинга
Отправлено: Efendy от 14 Октября 2009, 10:40:01
таблица rev_users содержит последние ревизии (на самом деле это вьюха от select max(revison) )


Название: Re: Модификация старых скриптов под новую версию билинга
Отправлено: goletsa от 16 Октября 2009, 12:16:06
можно ли с помощью nomake.pl сформировать файл вида:
Код:
host d3132{
hardware ethernet 00:1f:d0:98:b1:06;
fixed-address 172.16.2.20;
}

host d3132-modem {
hardware ethernet 00:18:c0:17:e6:0e;
fixed-address 172.16.12.20;
filename "cm-91.bin";
}


Название: Re: Модификация старых скриптов под новую версию билинга
Отправлено: Andrey Zentavr от 28 Октября 2009, 01:59:58
Маки выгребаю примерно так (кусок со скрипта):
Код:
# Select All ip <-> Mac pair
$query="SELECT u.ip AS ip, d.field_value AS mac FROM users u, dopvalues d, (
SELECT u.ip AS ip, MAX(d.revision) AS rev FROM users u, dopvalues d
    WHERE u.id=d.parent_id AND d.dopfield_id=".$config{'dopfield_id'}."
    GROUP BY ip
) AS tmp
        WHERE u.id=d.parent_id
            AND d.dopfield_id=".$config{'dopfield_id'}."
            AND u.ip=tmp.ip
            AND d.revision=tmp.rev
            AND TRIM(d.field_value) != ''";



Название: Re: Модификация старых скриптов под новую версию билинга
Отправлено: Efendy от 28 Октября 2009, 08:53:26
EXPLAIN твоего запроса хороший, еще проверю его правильность. Если все ок, то может в nodeny в некоторых местах поменяю. Только вопрос: зачем юзать сравнение по Ip u.ip=tmp.ip, если можно по id клиента? Сравнение строк дольше чем чисел