Laravel数据库过滤器总数大于n

时间:2018-02-28 09:21:50

标签: php sql laravel

当总数大于n时,如何仅筛选出结果? 换句话说,只有比n更多的IP(比如500)

我尝试了->where('total','>',500),但它无效

谢谢

$visits = DB::table('visits')
    ->select('ip_address',DB::raw('count(*) as total'))
    ->where('timestamp', '>=',\Carbon\Carbon::now()->startOfDay())
    ->groupBy('ip_address')
    ->orderBy('total', 'desc')
    ->get();

2 个答案:

答案 0 :(得分:3)

WHERE不能用于分组项目(例如count(*))而HAVING可以使用。 您可以参考WHERE vs HAVING问题了解更多详情,

您必须使用having

->having('total', '>', 100)

您可以选择使用havingRaw

->havingRaw('count(*) > 2500')
->havingRaw('total > 2500')

参考:https://laravel.com/docs/5.6/queries

答案 1 :(得分:0)

您可以使用filter方法

$visits = DB::table('visits')
             ->select('ip_address', DB::raw('COUNT(*) as total'))
             ->where('timestamp', '>=', \Carbon\Carbon::now()->startOfDay())
             ->groupBy('ip_address')
             ->orderBy('total', 'desc')
             ->get();

$filtered_visits = $visits->filter(function($item) {
    return $item->total > 500;
});