Биллинговая система Nodeny
29 Апреля 2024, 16:21:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Модификация старых скриптов под новую версию билинга  (Прочитано 4512 раз)
goletsa
NoDeny
Спец
*

Карма: 21
Offline Offline

Сообщений: 973


Просмотр профиля
« : 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
И такой же запрос для запрос для мака компьютера...

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

Карма: 24
Offline Offline

Сообщений: 352


Просмотр профиля Email
« Ответ #1 : 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')";
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #2 : 14 Октября 2009, 10:40:01 »

таблица rev_users содержит последние ревизии (на самом деле это вьюха от select max(revison) )
Записан
goletsa
NoDeny
Спец
*

Карма: 21
Offline Offline

Сообщений: 973


Просмотр профиля
« Ответ #3 : 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";
}
Записан
Andrey Zentavr
NoDeny
Старожил
*

Карма: 29
Offline Offline

Сообщений: 301



Просмотр профиля
« Ответ #4 : 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) != ''";

Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #5 : 28 Октября 2009, 08:53:26 »

EXPLAIN твоего запроса хороший, еще проверю его правильность. Если все ок, то может в nodeny в некоторых местах поменяю. Только вопрос: зачем юзать сравнение по Ip u.ip=tmp.ip, если можно по id клиента? Сравнение строк дольше чем чисел
« Последнее редактирование: 28 Октября 2009, 08:58:48 от Efendy » Записан
Страниц: [1]
  Печать  
 
Перейти в:  

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