2013-09-30 21 views
4

我有一個DB表,它記錄具有IP列和DateTime標記的請求。我試圖以某種方式獲取這些數據,這使得我可以計算某個IP發出請求的天數。我正在使用Laravel的查詢構建器。從MySQL中的DateTime中計算不同日子

到目前爲止,這是我已經有了:

$data = DB::table('requests') 
        ->groupBy('ip') 
        ->select('ip', 
          DB::raw('COUNT(DISTINCT created_at) as days'), 
          DB::raw('COUNT(*) as requests')) 
        ->orderBy('days', 'desc') 
        ->take(50) 
        ->get(); 

我的問題是時間戳還持有小時,分鐘和秒。所以「天數」將與總請求數大致相同。我只想計算活動天數。

回答

8

如果場created_atTIMESTAMP

COUNT(DISTINCT FROM_UNIXTIME(created_at, '%Y-%m-%d')) as days 

,或者如果字段是DATETIME

COUNT(DISTINCT DATE(created_at)) as days 
+1

或'COUNT(DISTINCT TO_DAYS( created_at))天,我想。 –

+0

非常感謝,這對我有用! – Stromgren

+0

@Fnatte:[TO_DAY()](http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_to-days)接受日期作爲參數而不是時間戳。 –