forum.bitel.ru http://forum.bitel.ru/ |
|
[6.1] Индекс в таблицу phone_geographic_code_{mid} (CRM) http://forum.bitel.ru/viewtopic.php?f=10&t=9913 |
Страница 1 из 1 |
Автор: | Phricker [ 11 ноя 2014, 15:25 ] |
Заголовок сообщения: | [6.1] Индекс в таблицу phone_geographic_code_{mid} |
Добавьте пожалуйста индекс в таблицу phone_geographic_code_{mid}, чтобы он автоматически создавался каждый месяц. Код: ALTER TABLE phone_geographic_code_10 ADD INDEX (dest_id); Без этого индекса запрос Код: SELECT c.id, c.title, c.comment, ls.session_start, ls.session_time, ls.round_session_time, ls.from_number, ls.from_number_164, ls.to_number, ls.to_number_164, pc.code, pd.title FROM log_session_10_201407 AS ls LEFT JOIN contract AS c ON c.id = ls.cid LEFT JOIN phone_dest_10 AS pd ON pd.id = ls.dest_id LEFT JOIN phone_geographic_code_10 AS pc ON pc.dest_id = pd.id ORDER BY ls.session_start просто неприлично долго выполняется. |
Автор: | Phricker [ 11 ноя 2014, 18:16 ] |
Заголовок сообщения: | Re: [6.1] Индекс в таблицу phone_geographic_code_{mid} |
Затупил. Скрипт в корне неверный. Он дублирует звонки т.к. к одному направлению может относится несколько географических кодов. Тогда сразу вопрос. Как можно узнать по какому географическому коду совершен звонок? |
Автор: | Phricker [ 11 ноя 2014, 18:37 ] |
Заголовок сообщения: | Re: [6.1] Индекс в таблицу phone_geographic_code_{mid} |
На правах оффтопа. Настолько странно хранить данные по звонкам нужно еще умудриться. Для того, чтобы например получить данные по звонкам совершенным по определенному маршруту из базы, достаточно одного SQL запроса, в случае если это было бы по двум таблицам. Но т.к. сырые логи хранятся в подневных таблицах , то надо к каждому звонку вычислять в какой-же таблице он хранится по полю hour, потом искать по cdr_id. Изврат какой-то как по мне |
Автор: | Phricker [ 11 ноя 2014, 19:04 ] |
Заголовок сообщения: | Re: [6.1] Индекс в таблицу phone_geographic_code_{mid} |
Phricker писал(а): Он дублирует звонки т.к. к одному направлению может относится несколько географических кодов. У вас в стандартном отчете модуля Reports phone_dest_ts, кстати точно такая же ошибка. Отчет выводит направление и код. Но т.к. к одному направлению относятся несколько кодов - он выводит только 1. |
Автор: | Phricker [ 13 ноя 2014, 00:07 ] |
Заголовок сообщения: | Re: [6.1] Индекс в таблицу phone_geographic_code_{mid} |
Phricker писал(а): Как можно узнать по какому географическому коду совершен звонок? АП. Кучу отчетов надо написать в ближайшие дни |
Автор: | Phricker [ 13 ноя 2014, 20:14 ] |
Заголовок сообщения: | Re: [6.1] Индекс в таблицу phone_geographic_code_{mid} |
Phricker писал(а): На правах оффтопа. Настолько странно хранить данные по звонкам нужно еще умудриться. Для того, чтобы например получить данные по звонкам совершенным по определенному маршруту из базы, достаточно одного SQL запроса, в случае если это было бы по двум таблицам. Но т.к. сырые логи хранятся в подневных таблицах , то надо к каждому звонку вычислять в какой-же таблице он хранится по полю hour, потом искать по cdr_id. Изврат какой-то как по мне Узнаем через какой порт прошел звонок Код: String query = " SELECT ls.cdr_id, ls.hour " + " FROM log_session_10_201406 AS ls " + " ORDER BY ls.session_start "; PreparedStatement ps = con.prepareStatement( query ); ResultSet rs = ps.executeQuery(); while( rs.next() ) { int cdrId = rs.getInt( "ls.cdr_id" ); Date cdrHour = rs.getDate( "ls.hour" ); String tableName = TimeUtils.format(cdrHour, "yyyyMMdd"); String cdrQuery = " SELECT from_port, to_port FROM data_log_10_" + tableName + " WHERE id = " + cdrId; PreparedStatement psCdr = con.prepareStatement( cdrQuery ); ResultSet rsCdr = psCdr.executeQuery(); while( rsCdr.next() ) { int from_port = rsCdr.getInt("from_port"); int to_port = rsCdr.getInt("to_port"); } rsCdr.close(); psCdr.close(); } rs.close(); ps.close(); |
Автор: | Phricker [ 13 ноя 2014, 20:51 ] |
Заголовок сообщения: | Re: [6.1] Индекс в таблицу phone_geographic_code_{mid} (CRM) |
а как было бы проще с Код: SELECT ls.session_start, ls.session_stop, ls.from_number, dl.from_port, ls.to_number, dl.to_port FROM log_session_10_201406 AS ls LEFT JOIN data_log_10_201406 AS dl ON ls.cdr_id = dl.id |
Автор: | Cromeshnic [ 13 ноя 2014, 21:39 ] |
Заголовок сообщения: | Re: [6.1] Индекс в таблицу phone_geographic_code_{mid} (CRM) |
А зачем лезть в сырые логи? Одного log_session мало? |
Автор: | Phricker [ 13 ноя 2014, 23:39 ] |
Заголовок сообщения: | Re: [6.1] Индекс в таблицу phone_geographic_code_{mid} (CRM) |
Экономистам нужны данные по трафику прошедшему через определенные маршруты. Т.е. например с маршрутов А,B,C на маршрут D. Так же РТК у них запрашивает данные в виде , где на каждый код направления необходимо суммировать кол-во минут, и разделять по категории клиента. Таблица log_session не хранит в себе ни данных о маршруте (в BG маршрут == порт), ни данных о том, через какой код направления прошли звонки. Причем ростелекомовский отчет насколько я знаю вполне официальный, и прописан в договоре. Сейчас спасаемся тем, что помимо BG все еще используется старый биллинг по телефонии из которого делаем отчеты. Но это же не может продолжаться вечность. С августа 12 года телефония в БГ считается |
Автор: | Cromeshnic [ 14 ноя 2014, 07:31 ] |
Заголовок сообщения: | Re: [6.1] Индекс в таблицу phone_geographic_code_{mid} (CRM) |
У нас обычно в зависимости от порта в тарифе определяется услуга (оператор): "Телефония Ростелеком МГ/МН" например. так что они косвенно в log_session всё равно присутствуют. А код направления - это "зона" у вас? |
Автор: | Phricker [ 14 ноя 2014, 10:21 ] |
Заголовок сообщения: | Re: [6.1] Индекс в таблицу phone_geographic_code_{mid} (CRM) |
Код направления это phone_geographic_code_{mid} |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |