php - 如何在 Laravel 中对多个字段进行计数分组

标签 php mysql sql laravel eloquent

我使用的是 Laravel 5.4。想象一下我想展示一些汽车广告。我将从表中获取所有汽车记录并将其加载到我的页面中。现在,我想在侧边栏中显示多个类别及其计数(汽车类型、汽车颜色、汽车燃料),并且我想显示每个类别的计数。

例如:我们有 10 个汽车广告,其中两个是红色,三个是绿色,五个是白色。我想在侧边栏中添加这样的内容:

red(2)
green(3)
white(5)

我用SQL groupBy做到了:

        $colors = DB::table('advertisments')->select('color_name', DB::raw('count(color_name) as total_color'))->groupBy('color_name')->get();
        $gearboxes = DB::table('advertisments')->select('gearbox', DB::raw('count(gearbox) as total_gearbox'))->groupBy('gearbox')->get();
        $param = ['colors' => $colors,'gearboxes' => $gearboxes];
        return view('ads' , compact('ads','param'));

但是,我有数十个类别,我无法使用一个 groupBy 来完成此操作,因此查询数量会太多。 有没有办法通过单个查询或更少的查询来完成此操作?

最佳答案

您可以使用数组来轻松遍历不同的列。

$params = [];
$columns = [
    'colors' => 'color_name',
    'gearboxes' => 'gearbox',
    // put your other columns in this array
];

foreach($columns as $name => $column)
    $params[$name] = DB::table('advertisments')->select($column, DB::raw('count(' . $column . ') as total'))->groupBy($column)->get();

return view('ads' , compact('ads','param'));

关于php - 如何在 Laravel 中对多个字段进行计数分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46539392/

相关文章:

php - 代码点火器 MY_Controller : is it only possible to extend core once?

php - 如何在magento核心资源中设置utf8字符集?

php - 对不存在的行使用 Fetch

每个客户交易输出 "Prior Transaction Date"的 MYSQL 查询

sql - 从日期字段中仅获取日期和月份

php - MySQL队列查询吗?

php - Kohana 3.2,ORM has_many,belongs_to 关系未引用正确的键

php - Laravel 5.3 在登录时重定向被禁止的用户

mysql - SQL 不同的分组查询

mysql - JOIN语句的SQL问题(1个表的多个结果)