[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод цены для звонка
@Fetch
Привет, всем. Я не программист, но есть задача.
Есть две mysql таблицы rates и cdr, которые содержат поля
rates
prefix | cost
8495 | 15
81049 | 20
8104950 | 22

cdr
date | src | dst
2009-05-17 22:10 | 960096 | 84957392222

Задача, при заполнение таблицы cdr нужно сделать вывод статистики в таком виде

Дата | Источник | Направление | Описание | Стоимость

Вот никак, не могу понять, как совместить данные с обоих таблиц. Буду благодарен за пример решения.



Спустя 3 минуты, 7 секунд (17.05.2009 - 19:16) Kuliev написал(а):
Я что то не увидел связи между таблицами!

Спустя 8 минут, 21 секунда (17.05.2009 - 19:24) @Fetch написал(а):
А как делается связь?
У меня связь в полях rate.prefix и cdr.dst
т.е. по префиксу определяется цена.

Спустя 2 минуты, 26 секунд (17.05.2009 - 19:26) Kuliev написал(а):
Цитата (@Fetch @ 17.05.2009 - 21:24)
А как делается связь?

По ключам либо по индексам!

Спустя 3 минуты, 18 секунд (17.05.2009 - 19:30) waldicom написал(а):
`rates` LEFT JOIN на `cdr` по полям `prefix` и `dst`

Спустя 11 минут, 24 секунды (17.05.2009 - 19:41) @Fetch написал(а):
Не так всё просто значение полей prefix и dst не идентичны
есть cdr.dst='84957392222' нужно по нему выйти на rate.prefix='8495'

Спустя 2 минуты, 54 секунды (17.05.2009 - 19:44) waldicom написал(а):
Ну может стоило описать это сразу? Или задача была:"а догадайтесь-ка дяденьки, шо мне надо"?

Спустя 6 минут, 20 секунд (17.05.2009 - 19:50) @Fetch написал(а):
Ну, теперь вы всё знаете, что нибудь можете подсказать?

Спустя 6 минут, 57 секунд (17.05.2009 - 19:57) waldicom написал(а):
Можно попробовать.
Написать процедуру, которая посимвольно ищет совпадения для dst (т.е. берет первую цифру, ищет по ней в таблице `rates`. Не нашла. Берем два символа. Не нашли. Берем три символа и так далее) и при нахождении выбирает эту строку их `rates`

Спустя 2 часа, 51 минута, 2 секунды (17.05.2009 - 22:48) sergeiss написал(а):
Поля prefix и dst цифровые или символьные? Для символьных всё будет очень просто, можно использовать LIKE в условии, в том самом указанном выше LEFT JOIN.

Спустя 44 минуты, 33 секунды (17.05.2009 - 23:33) Alchemist написал(а):
LIKE использовать конечно можно, но вот телефон 8104950121212 посчитается два раза, для:
Цитата
81049 | 20
и
Цитата
8104950 | 22

Спустя 22 часа, 7 минут, 7 секунд (18.05.2009 - 21:40) @Fetch написал(а):
Спасибо всем. Задача решена.
PHP
$result mysql_query("SELECT * FROM ".$billing_cdr." WHERE calldate LIKE '$today%' ORDER By id DESC LIMIT ".$go.$_GET[go].", ".$default) or die (mysql_error());
        print 
"<table align=\"center\" width=\"100%\"><tr>
                <td align=\"center\" style=\"border: 1px dotted #CCCCCC\"><b>Дата</b></td>
                <td align=\"center\" style=\"border: 1px dotted #CCCCCC\"><b>Источник</b></td>
                <td align=\"center\" style=\"border: 1px dotted #CCCCCC\"><b>Номер</b></td>
                <td align=\"center\" style=\"border: 1px dotted #CCCCCC\"><b>Направление</b></td>
                <td align=\"center\" style=\"border: 1px dotted #CCCCCC\"><b>Длительность (сек.)</b></td>
                <td align=\"center\" style=\"border: 1px dotted #CCCCCC\"><b>Стоимость</b></td></tr>"
;
        
$q mysql_query("SELECT MAX(prefix) FROM ".$billing_rates);
        
$r mysql_fetch_array($q);
        
$max_len_prefix strlen($r['MAX(prefix)']);
        while(
$row mysql_fetch_array($result)){
              print 
"<tr><td align=\"center\">".$row['calldate']."</td>
              <td align=\"center\">"
.$row['src']."</td>
              <td align=\"center\">"
.$row['dst']."</td>";
              
$search_dst_prefix substr_replace($row['dst'], ''$max_len_prefix);
              
$start_dst_prefix $search_dst_prefix;
              for(
$i=0;$i<=($max_len_prefix-1);$i++){
              
$finish_dst_prefix $start_dst_prefix;
              
$finish_dst_prefix substr_replace($finish_dst_prefix''$i);
              
$p mysql_query("SELECT * FROM ".$billing_rates);
              while(
$rp mysql_fetch_array($p)){
                  if(
$rp['prefix']==$finish_dst_prefix){
                      
$cost $row[billsec]/60*$rp[cost];
                      print 
"<td align=\"center\">".$rp['description']."</td><td align=\"center\">".$row['billsec']."</td><td align=\"center\">".$cost."</td></tr>";
                      }
                  }


        }
        }

        print 
"</table>";
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.