为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Laravel Eloquent 获取上个月的总网页浏览量

如何使用 Laravel Eloquent 获取上个月的总网页浏览量

PHP
qq_笑_17 2024-01-19 15:09:57
我有这个 post_views 表created_at         post_id       ip==========         =======       =======01-01-2020            3            127.0.0.101-01 2020            5            127.0.0.102-01 2020            5            127.0.0.103-01 2020            5            222.33.44.5506-02 2020            3            222.33.44.5506-02 2020            3            127.0.0.110-02 2020            5            33.44.55.6602-03 2020            3            22.33.65.2202-03 2020            3            22.33.65.2202-03 2020            5            11.44.55.66我需要使用此表对每天的访问量进行求和以获得过去 3 个月的总网页浏览量,我的意思是结果:January= 3 visitsFebruary = 3 visitsMarch = 2 visits
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

希望这样的事情能够帮助你。


在你的Post模型内部:


public function getLastThreeMonthViewsByIP($ip)

{

    $data = [];


    // loop 3 months

    for ($i = -3; $i < 0; $i++)

    {

        $timestamp = strtotime("$i month");

        

        $monthNumber = date('n', $timestamp);


        // from this post

        $result = $this->views()

            // in this month

            ->whereMonth('created_at', $monthNumber)

            // from this ip

            ->where('ip', $ip)

            // group IP

            ->groupBy('ip')

            // count all

            ->selectRaw('count(*) AS total')

            // and return first 

            ->first();


        // if there are any results, add to data

        if ($result)

        {

            $monthName = date('F', $timestamp);


            $data[] = [

                'monthNumber' => $monthNumber,

                'monthName' => $monthName,

                'total' => $result->total,

            ];

        }

    }


    return $data;

}


查看完整回答
反对 回复 2024-01-19
?
慕容森

TA贡献1853条经验 获得超18个赞

您可以运行下一个 SQL 查询来生成此信息:


SELECT month, count(*) AS total

FROM (

    SELECT DATE_FORMAT(created_at, '%Y-%m') AS month

    FROM post_views

    GROUP BY month, ip

) AS calculated

GROUP BY month;


结果:


2020-01, 3

2020-02, 3

2020-03, 2

要使其与 Laravel 一起使用:


$result = DB::raw("

    SELECT month, count(*) AS total

    FROM (

        SELECT DATE_FORMAT(created_at, '%Y-%m') AS month

        FROM `post_views`

        WHERE `created_at` >= DATE_FORMAT(now() - interval ? month, '%Y-%m-01') 

        GROUP BY DATE_FORMAT(`created_at`, '%Y-%m'), ip

    ) AS calculated

    GROUP BY `month`

", [3]); // last 3 months


dd($result); // to see results


希望有帮助!


查看完整回答
反对 回复 2024-01-19
  • 2 回答
  • 0 关注
  • 40 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信