我有一个带有电话记录的数据库,每个月,我会根据它向客户收费。
记录包含:
ID - Owner - Caller_ID - Calling_To - connect_time - disconnect_time - category
客户可能拥有多个号码。如果在任何时候2条记录的connect_time重叠,则它是并发调用。 E.g:
X1 - Alex - 0099989898 - random number - 01:00:00 - 02:00:00 - international
X2 - Alex - 0055989898 - random number - 01:30:00 - 01:50:00 - local
X3 - Alex - 0066666666 - random number - 01:45:00 - 02:00:00 - local
X1和X2是并发呼叫。
我用来获取过去一个月记录的当前查询如下:
CallDataRecord::where('owner', 'Alex')
->whereBetween('connect_time', array($beginDate, $endDate))
->orderBy('connect_time', 'desc')
->get();
这很简单,但我没有在哪里开始能够查询并发调用方面取得任何成功。
我使用数组和一堆if else
语句以及一个函数来制作一个PHP脚本,例如isDateBetween
我将在foreach
循环中运行数据库中所有获取的记录,以检查数字/记录是否被其他数字/记录封装?,从而获得并发呼叫。这非常慢。
我很感激一些指导。谢谢。
答案 0 :(得分:0)
是的,与数据库系统不同,在PHP中循环返回的结果将非常缓慢,因为数据不会被索引。
下面应该返回您要查找的数据:
CallDataRecord::where('owner', 'Alex')
->whereBetween('connect_time', array($beginDate, $endDate))
->where(function ($q) {
$q->where('connect_time', '>=', 'connect_time')
$q->where('connect_time', '<=', 'disconnect_time')
})
->orWhere(function ($q) {
$q->where('disconnect_time', '>=', 'connect_time')
$q->where('disconnect_time', '<=', 'disconnect_time')
})
->orderBy('connect_time', 'desc')
->get();