Laravel 充分利用数据库

Laravel get most out of the database

我在 Laravel 4 中有一个跟踪器,我想知道如何从我的 table.

中获取 'most'

所以我想要的是拥有最多访客的那一天。

我的 table 结构如下所示:

所以,我的控制器看起来像这样:

public function index()
    {    
        $begin = date('Y-m-01');
        $end = date('Y-m-t');

        $visits = Tracker::selectRaw('date, count(ip)')->groupBy('date')->whereRaw("date between '$begin' and '$end'")->get();

        //get total visits per month
        $get_visits = Visitor::whereRaw("date between '$begin' and '$end'")->count();

        // get average visits
        // transform dates to DateTime objects (we need the number of days between $begin and $end)
        $begin = new \DateTime($begin);
        $end = new \DateTime('now');
        $diff = $end->diff($begin); // creates a DateInterval object
        $days = (int)$diff->format('%a'); // %a  -->  days
        $average_visits = $get_visits / $days;


        return View::make('admin.home.index')->with('stats', $visits)
                                             ->with('get_visits', $get_visits)
                                             ->with('average_visits', $average_visits);

    }

我想要的输出:

We had the most visitors on 18/06/2015 (542 visitors)

例如

谢谢!

您可以SELECT日期ORDER BY访问者数量DESCENDINGLIMIT 减 1。这是基本的 mysql。如何在 laravel 中使用它,在 documentation.

按说明排序:

->orderBy('visits', 'desc')

限制:

->take(1)

我的示例查询基于一个系统,该系统有一个计算访问次数的列(您的结构没有)。因此,让我来帮助您完成结构。

你想按日期得到它所以你基本上 GROUP BY date:

->groupBy('date')

您希望从此查询中获得属于该日期的行数。所以你使用 COUNT:

->count()

这完全基于您对查询的了解。 这都是根据查询生成器。