我有一个名为visitor的表:
visitors : (id , user_id , ip , created_at , route , refer )
我在包含链接的中间件中为每次页面访问存储一行
我想在我的管理面板中显示这些内容,但是你想象它们中有很多,所以我想显示每个用户每天的第一次访问,比如我在db中有这个
1 , 356 , 127.0.0.1 , 2017-08-30 22:41:49
1 , 356 , 127.0.0.1 , 2017-08-30 22:50:49
1 , 356 , 127.0.0.1 , 2017-08-30 22:53:49
1 , 356 , 127.0.0.1 , 2017-08-30 23:11:49
1 , 400 , 127.0.0.1 , 2017-08-30 23:50:49
查询结果应为
1 , 356 , 127.0.0.1 , 2017-08-30 22:41:49
1 , 356 , 127.0.0.1 , 2017-08-30 23:11:49
1 , 400 , 127.0.0.1 , 2017-08-30 23:50:49
所以我想要的是像
DISTINCT(DATE(created_at))
但这会影响所有用户..我希望它能影响每个用户
它非常复杂我不知道该怎么办呢
答案 0 :(得分:1)
试试这个
DB::table('visitors')->select('id','user_id','ip','created_at')->groupBy(DB::raw('DATE(created_at)'))->groupBy('user_id')->get();
这将在一天内为独特用户提供。
答案 1 :(得分:0)
我想你可以这样试试:
DB::table('visitors')
->distinct('created_at')
->orderBy('created_at', 'asc')
->get();
另一种方法是为User
实体添加额外字段,如fisrt_visit
,如果它很重要
答案 2 :(得分:0)
如上所述,您希望使用MIN
函数在首次登录时使用GROUP BY
按用户ID对其进行分组:
DB::table('visitors')
->select(['user_id', DB::raw('MIN(created_at)')])
->groupBy('user_id')
->get();
如果需要,您可以添加其他列,但密钥为DB::raw('MIN(created_at)')
,它将为每个用户获取最早的created_at时间戳。 DB::raw
将完全按照您指定的方式传入该字符串。