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

问题描述 投票:2回答:2

当总数大于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();
php sql laravel
2个回答
3
投票

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

你必须使用having

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

您可以选择使用havingRaw

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

ref:https://laravel.com/docs/5.6/queries


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;
});
© www.soinside.com 2019 - 2024. All rights reserved.