Laravel充分利用了数据库

时间:2015-06-18 12:56:41

标签: php laravel-4 tracker

我在Laravel 4有一个跟踪器,我想知道,我怎样才能得到最多的'从我的桌子。

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

我的表格结构如下:

Structure

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

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);

    }

我想要的输出:

  

2015年6月18日我们访客最多(542名访客)

例如。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以选择日期 ORDER BY 访问者数量 DESCENDING LIMIT 增加1.这是基本的mysql。如何在laravel中使用它,在documentation

命令desc:

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

限制:

->take(1)

我的示例查询基于一个系统,该系统有一个列来计算访问次数(您的结构没有)。所以,让我帮你解决一下你的结构。

您希望按日期拥有它,因此您基本上 GROUP BY 日期:

->groupBy('date')

从此查询中,您希望拥有属于该日期的行数。因此,您使用 COUNT

->count()

这完全基于您了解有关查询的内容。 这完全取决于查询构建器。