5

IP 列と DateTime スタンプを使用してリクエストをログに記録する DB テーブルがあります。特定の IP がリクエストを行った日数をカウントできるように、このデータを取得しようとしています。Laravel のクエリビルダーを使用しています。

これまでのところ、これは私が持っているものです:

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

私の問題は、タイムスタンプにも時間、分、秒が含まれていることです。したがって、「日数」のカウントは、リクエストの合計数とほぼ同じになります。アクティブな日数のみをカウントしたい。

4

2 に答える 2

12

フィールドcreated_atTIMESTAMPの場合:

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

またはフィールドがDATETIMEの場合:

COUNT(DISTINCT DATE(created_at)) as days
于 2013-09-30T09:10:57.623 に答える