2017-01-16 136 views
0

我有一個數據庫,每個月都有電話記錄,我會根據這個數據向客戶開賬單。從DB選擇併發電話呼叫

記錄包含:

ID - Owner - Caller_ID - Calling_To - connect_time - disconnect_time - category 

客戶可以擁有多個號碼。如果有2條記錄的connect_time重疊,那麼這是一個併發呼叫。例如:

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(); 

這很簡單,但我還沒有從哪裏開始可以查詢併發呼叫任何成功。

我已經做了一個PHP腳本使用數組和一堆if else語句加上一個函數,例如isDateBetween,我會運行所有從數據庫提取的記錄在foreach循環,將檢查數字/記錄是否封裝由另一個號碼/記錄,從而獲得併發呼叫。這是非常緩慢的。

我很感激一些指導。謝謝。

+0

我怎麼能知道這是同一個客戶端的多個號碼是多少? – sumit

+0

@sumit對不起。我編輯了桌子。例如,他們有一個「所有者」字段。 – Spacemudd

回答

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();