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.
Изврат какой-то как по мне :o

Автор:  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.
Изврат какой-то как по мне :o


Узнаем через какой порт прошел звонок
Код:
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

:oops:

Автор:  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/