微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 按时间戳排序Summed Collection

在之前的一篇文章中,我询问获得的总数最终是Laravel中值的总和().然而,当数据返回时,它只输出总和而没有通常也会​​输出的任何其他信息(例如:关系,时间戳等).通常情况下,如果我只是将所有内容的总和作为一个数字,这将不是问题.

下面是我正在重新创建的视觉的硬编码示例,下面是创建它的数据.

Line Morris.JS Chart

data: [{
                period: '2016-04',
                views: 2666,
            }, {
                period: '2016-05',
                views: 2778,
            }, {
                period: '2016-06',
                views: 4912,
            }, {
                period: '2016-07',
                views: 3767,
            }, {
                period: '2016-08',
                views: 6810,
            }, {
                period: '2016-09',
                views: 5670,
            }, {
                period: '2016-10',
                views: 4820,
            }, {
                period: '2016-11',
                views: 15073,
            }],

因此,如果不编写循环,那么在任何给定时间段内获取所有帖子的每日访问量的最佳方式是什么.基本上,一个用户拥有很多帖子,每个帖子都有很多访问者,所以下面是我如何得到它们的总和,但正如你在上面看到的,我需要根据访问者表中的created_at时间戳记每天的总和.

return Post::where('user_id', Auth::user()->id)->withCount(['visitors' => function($query)
        {
            $query->where('created_at', '<=', Carbon\Carbon::Now())->where('created_at', '>=', Carbon\Carbon::yesterday());
        }])->get()->sum('visitors_count');

解决方法:

我不熟悉Laravel.所以我可以告诉你如何在MysqL中编写查询,也许你可以翻译:

你使用DATE()来截断时间部分,这样每个人都有相同的日期yyyy-mm-dd,那么你可以将这些天的GROUP BY一起归结为COUNT(访问者)

您需要参数@user_id,@ start_range,@ end_range

小心你如何设置@end_range.如果您使用@end_range = 2016-11-17’那么’2016-11-17 10:10:00’将超出该范围.所以你们应该使用2016-11-17 23:59:59

 SELECT DATE(created_at), count(visitors)
 FROM posts
 WHERE user_id = @user_id
   AND created_at BETWEEN @start_range
                      AND @end_range
 GROUP BY DATE(created_at)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐