forum.bitel.ru http://forum.bitel.ru/ |
|
Поиск абонента по IP и диапазону времени http://forum.bitel.ru/viewtopic.php?f=44&t=8843 |
Страница 1 из 1 |
Автор: | survivor [ 17 янв 2014, 14:06 ] |
Заголовок сообщения: | Поиск абонента по IP и диапазону времени |
Доброго дня, Пытаюсь составить 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 в указанный промежуток времени. Не совсем то... |
Автор: | stark [ 20 янв 2014, 11:49 ] |
Заголовок сообщения: | Re: Поиск абонента по IP и диапазону времени |
survivor писал(а): Получается что я нахожу нужный договор, но вместе с ним и всех абонентов у которых одинаковый Inet сервис с тем договором, который действительно имел нужный IP в указанный промежуток времени. Не совсем то... А как такое могло получится? в один момент времени не должно быть одинаковых адресов. |
Автор: | skyb [ 20 янв 2014, 12:15 ] |
Заголовок сообщения: | Re: Поиск абонента по IP и диапазону времени |
Код: 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)) например. Не? |
Автор: | borisk [ 20 янв 2014, 12:27 ] |
Заголовок сообщения: | Re: Поиск абонента по IP и диапазону времени |
Мне кажется, что запрос написан неверно. Сам пользуюсь вот таким, и он прекрасно работает: Код: 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. "Неверно" относится к оригинальному письму |
Автор: | survivor [ 21 янв 2014, 13:08 ] |
Заголовок сообщения: | Re: Поиск абонента по IP и диапазону времени |
Спасибо ![]() |
Автор: | borisk [ 21 янв 2014, 13:17 ] |
Заголовок сообщения: | Re: Поиск абонента по IP и диапазону времени |
А вот это уже действительно странно ![]() |
Автор: | skyb [ 21 янв 2014, 14:11 ] |
Заголовок сообщения: | Re: Поиск абонента по IP и диапазону времени |
вот так я получаю данные по 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 ); } |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |