BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 21 июн 2025, 10:51

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
СообщениеДобавлено: 17 янв 2014, 14:06 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 24 июн 2009, 17:49
Сообщения: 640
Карма: 10
Доброго дня,

Пытаюсь составить SQL для поиска абонента по известному IP и диапазону времени. Попробовал связку inet_session_log->inet_serv->contract:

Код:
mysql> select c.id, hex(il2.ipAddress), il2.sessionStart, il2.sessionStop from inet_serv_2 is2 join inet_session_log_2_201401 il2 on (is2.deviceId=il2.deviceId) join contract c on (c.id=is2.contractId) where hex(il2.ipAddress)='****30C2' and il2.sessionStart<='2014-01-15 16:44:56' and il2.sessionStop>='2014-01-15 16:44:56';
+----+--------------------+---------------------+---------------------+
| id | hex(il2.ipAddress) | sessionStart        | sessionStop         |
+----+--------------------+---------------------+---------------------+
|  1 | ****30C2           | 2014-01-15 16:44:56 | 2014-01-15 18:59:14 |
| 12 | ****30C2           | 2014-01-15 16:44:56 | 2014-01-15 18:59:14 |
| 15 | ****30C2           | 2014-01-15 16:44:56 | 2014-01-15 18:59:14 |
| 19 | ****30C2           | 2014-01-15 16:44:56 | 2014-01-15 18:59:14 |
| 20 | ****30C2           | 2014-01-15 16:44:56 | 2014-01-15 18:59:14 |
| 18 | ****30C2           | 2014-01-15 16:44:56 | 2014-01-15 18:59:14 |
| 21 | ****30C2           | 2014-01-15 16:44:56 | 2014-01-15 18:59:14 |
+----+--------------------+---------------------+---------------------+
7 rows in set (0.00 sec)

Получается что я нахожу нужный договор, но вместе с ним и всех абонентов у которых одинаковый Inet сервис с тем договором, который действительно имел нужный IP в указанный промежуток времени. Не совсем то...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 янв 2014, 11:49 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
survivor писал(а):
Получается что я нахожу нужный договор, но вместе с ним и всех абонентов у которых одинаковый Inet сервис с тем договором, который действительно имел нужный IP в указанный промежуток времени. Не совсем то...


А как такое могло получится? в один момент времени не должно быть одинаковых адресов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 янв 2014, 12:15 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
Код:
SELECT c.title, INET_NTOA(CONV(HEX(isl.ipAddress), 16, 10)), isl.sessionStart, isl.sessionStop FROM contract AS c
LEFT JOIN inet_serv_21 AS ise ON c.id=ise.contractId
LEFT JOIN inet_session_log_21_201309 AS isl ON isl.servId=ise.id
WHERE isl.ipAddress IS NOT NULL AND '2013-09-04 01:50:00' BETWEEN isl.sessionStart AND isl.sessionStop AND isl.ipAddress = UNHEX(CONV(INET_ATON('x.x10.193'), 10, 16))

например. Не?

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 20 янв 2014, 12:27 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
Мне кажется, что запрос написан неверно. Сам пользуюсь вот таким, и он прекрасно работает:
Код:
SELECT t2.contractId, t3.title, DATE_FORMAT(t1.sessionStart, '%Y-%m-%d %T'), DATE_FORMAT(t1.sessionStop, '%Y-%m-%d %T'),INET_NTOA(CONV(HEX(ipAddress), 16, 10)) FROM inet_session_log_XXXX t1, inet_serv t2, contract t3 WHERE t1.sessionStart>='XXX' AND t1.sessionStop <= 'YYY' AND INET_NTOA(CONV(HEX(ipAddress), 16, 10))='ZZZ' GROUP BY t2.contractId ORDER BY 1


P.S. "Неверно" относится к оригинальному письму


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 янв 2014, 13:08 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 24 июн 2009, 17:49
Сообщения: 640
Карма: 10
Спасибо :) оба запроса работают... но, показывают РАЗНЫЕ договора, которые имели данный IP в данный момент времени!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 янв 2014, 13:17 
Не в сети
Клиент

Зарегистрирован: 15 мар 2009, 14:04
Сообщения: 1337
Карма: 12
А вот это уже действительно странно :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 янв 2014, 14:11 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
вот так я получаю данные по ip и макам в отчете, они соответствуют тому что нужно, это я проверял

Код:
<queryString language="BGBS"><![CDATA[import java.sql.*;                                                                                                                                                                             
import java.util.*;                                                                                                                                                                                                                         
                                                                                                                                                                                                                                             
public void fillReport( con, filter, result )                                                                                                                                                                                               
{                                                                                                                                                                                                                                           
String mac = filter.getStringParam("mac");                                                                                                                                                                                                   
String ip = filter.getStringParam("ip");                                                                                                                                                                                                     
                                                                                                                                                                                                                                             
if (mac.equals(""))                                                                                                                                                                                                                         
{                                                                                                                                                                                                                                           
PreparedStatement ps = con.prepareStatement( result.sql(" SELECT c.title AS col1, cpt1.val AS col2, "+                                                                                                                                       
" cpt2.address AS col3, isl.callingStationId AS col4, INET_NTOA(CONV(HEX(isl.ipAddress), 16, 10)) AS col5, isl.sessionStart AS col6, isl.sessionStop AS col7 "+                                                                             
" FROM contract AS c "+                                                                                                                                                                                                                     
" LEFT JOIN inet_serv_21 AS ise ON c.id=ise.contractId "+
" LEFT JOIN $module_month_table( inet_session_log , date ) AS isl ON isl.servId=ise.id "+
" LEFT JOIN contract_parameter_type_1 AS cpt1 ON cpt1.cid=c.id "+
" LEFT JOIN contract_parameter_type_2 AS cpt2 ON cpt2.cid=c.id "+
" WHERE isl.ipAddress IS NOT NULL AND '$date(date) $(hours)' BETWEEN isl.sessionStart AND isl.sessionStop "+
" AND isl.ipAddress = UNHEX(CONV(INET_ATON('$(ip)'), 10, 16)) AND cpt1.pid = 3 AND cpt2.pid=1", filter ) );
 ResultSet rs = ps.executeQuery();
 List res = new ArrayList();
 while(rs.next())
  {
    Map  map = new HashMap();
    title = rs.getString(1);
    fio = rs.getString(2);
    address = rs.getString(3);
    mac = rs.getString(4);
    ip  = rs.getString(5);
    start  = rs.getString(6);
    stop  = rs.getString(7);

    map.put("col1", title);
    map.put("col2", fio);
    map.put("col3", address);
    map.put("col4", mac);
    map.put("col5", ip);
    map.put("col6", start);
    map.put("col7", stop);

        res.add(map);
  }
 result.setDataSource( res );
}
else
{
PreparedStatement ps = con.prepareStatement( result.sql(" SELECT c.title AS col1, cpt1.val AS col2, "+
" cpt2.address AS col3, isl.callingStationId AS col4, INET_NTOA(CONV(HEX(isl.ipAddress), 16, 10)) AS col5, isl.sessionStart AS col6, isl.sessionStop AS col7 "+
" FROM contract AS c "+
" LEFT JOIN inet_serv_21 AS ise ON c.id=ise.contractId "+
" LEFT JOIN $module_month_table( inet_session_log , date ) AS isl ON isl.servId=ise.id "+
" LEFT JOIN contract_parameter_type_1 AS cpt1 ON cpt1.cid=c.id "+
" LEFT JOIN contract_parameter_type_2 AS cpt2 ON cpt2.cid=c.id "+
" WHERE isl.callingStationId IS NOT NULL "+
" AND isl.callingStationId = '$(mac)' AND cpt1.pid = 3 AND cpt2.pid=1", filter ) );
 ResultSet rs = ps.executeQuery();
 List res = new ArrayList();
 while(rs.next())
  {
    Map  map = new HashMap();
    title = rs.getString(1);
    fio = rs.getString(2);
    address = rs.getString(3);
    mac = rs.getString(4);
    ip  = rs.getString(5);
    start  = rs.getString(6);
    stop  = rs.getString(7);

    map.put("col1", title);
    map.put("col2", fio);
    map.put("col3", address);
    map.put("col4", mac);
    map.put("col5", ip);
    map.put("col6", start);
    map.put("col7", stop);
System.out.println("mac " + mac);
        res.add(map);
  }
 result.setDataSource( res );
}

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.039s | 31 Queries | GZIP : On ]