【发布时间】:2018-11-09 09:33:15
【问题描述】:
我在 Postgres 中有一个带有 SIP 日志的表。
| in | out | sec |
| 112 | sip/113-random | 12 |
| 113 | sip/112-random | 45 |
| 112 | sip/114-random | 40 |
| 113 | sip/114-random | 35 |
| 117 | sip/113-random | 11 |
| 117 | sip/113-random | 25 |
| 115 | sip/112-random | 98 |
| 115 | sip/117-random | 78 |
| 112 | sip/113-random | 18 |
我需要将“输入”和“输出”中的所有sec 与单个 SIP 相加,并按 SIP 号码分组。
例子:
....
112 - 54
113 - 152
115 - 25
....
现在我使用此代码。但它是循环运行的,需要很长时间。
$array_sip=array(110,111 .... 199);
foreach ($array_sip as $sip) {
$sum_out=0;
$sum_in=0;
$sql = "SELECT SUM(sec) AS sec
FROM public.cdr
WHERE calldate::text like '".$date."%'
AND disposition='ANSWERED'
AND out like 'SIP/".$sip."%'
AND sec > 15
";
foreach ($db->query($sql) as $row) {
$sum_out=$row['sec'];
}
$sql = "SELECT SUM(sec) AS sec
FROM public.cdr
WHERE calldate::text like '".$date."%'
AND disposition='ANSWERED'
AND in = '".$sip."'
AND sec > 3";
foreach ($db->query($sql) as $row) {
$sum_in=$row['sec'];
}
$sum=round((($sum_out+$sum_in)/60),1);
$loading_level.= $sip.' - '.$sum;
}
如何优化查询?
【问题讨论】:
-
PostgreSQL MySQL。请相应地标记问题(不要标记垃圾邮件)。
标签: php postgresql sqlperformance