0

我有一个表记录对我的站点的请求,其中包含一个 IP 和 DateTime 格式的时间戳。我运行一个查询来检查大多数这样的请求的 ip。

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

“天”属性应该计算一个 IP 地址活跃的天数。我的问题是我的时间戳是 Ymd H:i:s,这意味着,通过计算 DISTINCT 时间戳,我得到的计数与请求基本相同。因此,我需要一种仅按日、月和年计算时间戳的方法。

很感谢任何形式的帮助。

4

1 回答 1

1

尝试在 COUNT(DISTINCT)中使用date_format

CREATE TABLE mytable (
id INT PRIMARY KEY AUTO_INCREMENT,
created_at DATETIME
)

INSERT INTO mytable (created_at) VALUES ('2013-01-01 12:00:01');
INSERT INTO mytable (created_at) VALUES ('2013-01-01 20:00:01');
INSERT INTO mytable (created_at) VALUES ('2013-02-01 20:00:01');

SELECT COUNT(DISTINCT DATE_FORMAT(created_at, '%Y-%m-%d')) FROM mytable
于 2013-09-09T23:02:04.870 回答