当前位置: 首页 > 知识库问答 >
问题:

Laravel雄辩的conat和group()返回每个组的一个标题

施令秋
2023-03-14

我有一个表,其中包含,除其他列,一列浏览器版本。我只是想从记录中知道,每种类型的浏览器有多少。

我的代码是:

php prettyprint-override">$whereBrowser = [['owner', '=', 12]];
        $browser = ProfileTracker::where($whereBrowser)->whereBetween('created_at', [Carbon::now()->startOfMonth(), Carbon::now()->endOfMonth()])->select([
            DB::raw('browser'),
            DB::raw('COUNT(browser) as value')
        ])->groupBy("browser")->orderBy("value", "desc")->take(10)->get();

输出:

          "browser": [
              {
                  "browser": "Chrome Mobile 84",
                  "value": 144
              },
              {
                  "browser": "Chrome Mobile 80",
                  "value": 84
              },
              {
                  "browser": "Chrome 84",
                  "value": 27
              },
              {
                  "browser": "Chrome 30",
                  "value": 22
              },
              {
                  "browser": "Chrome Mobile 83",
                  "value": 19
              },
              {
                  "browser": "Chrome Mobile 47",
                  "value": 10
              },
              {
                  "browser": "Firefox 79",
                  "value": 8
              },
              {
                  "browser": "Mobile Safari",
                  "value": 8
              },
              {
                  "browser": "Mobile Safari 13.1.2",
                  "value": 6
              }
          ],
         
      }

我想分组所有的浏览器,没有像这样的浏览器版本:

            "browser": [
                {
                    "browser": "Chrome",
                    "value": 306
                },
                {
                    "browser": "Safari",
                    "value": 14
                },
                {
                    "browser": "Firefox",
                    "value": 8
                },
            ],
           
        }

共有2个答案

邹博明
2023-03-14

通过使用SUBSTRING\u INDEX函数提取第一个字符串,您可以使用substr浏览器名称:

      $browser = ProfileTracker::where($whereBrowser)
      ->selectRaw("browser,SUBSTRING_INDEX(browser, ' ', 1) AS BrowserName,COUNT(browser) as value")
      ->whereBetween('created_at', [Carbon::now()->startOfMonth(), Carbon::now()->endOfMonth()])
      ->groupBy("BrowserName")->orderBy("value", "desc")->take(10)->get();
楮阳
2023-03-14

实现这一点的一种方法是在字符串中查找浏览器名称,并将其解析为查询中的浏览器名称。因此类似于mobilesafari15.1.2的内容将被解析为Safari

ProfileTracker::selectRaw('
    CASE 
        WHEN browser LIKE '%firefox%' THEN 'Firefox'
        WHEN browser LIKE '%chrome%' THEN 'Chrome'
        WHEN browser LIKE '%safari%' THEN 'Safari'
    END AS browser_name,
    count(1) AS count
')->groupBy('browser_name')->get();

请注意,我已经删除了查询生成器的一部分,以使这个示例更具可读性。你可以自己添加任何你需要的东西。

这将为您提供:

Chrome  1
Firefox 1
Safari  2

我的测试数据是:

"Chrome Mobile"
"Firefox 79"
"Mobile Safari 13.1.2"
"Mobile Safari 15.1.2"
 类似资料:
  • 我有一个表,其中包括一列浏览器版本。我只是想从记录集中知道每种浏览器有多少种。所以,我需要这样结束:总记录:10;InternetExplorer 8:2;铬25:4;火狐20:4。(总计10) 这是我的两便士: 当然,它只包含3个浏览器,而不是每个浏览器的数量。我该怎么做呢?

  • 我想使用Laravel Eloquent完成任务。我在网上搜索过,没有找到任何有说服力的东西。有些人将groupBy()查询与查询生成器一起使用,如以下链接 但是我想创建这样的查询风格: 此代码仅返回第一个的计数。但是我要计算所有的。

  • 问题内容: 在此查询中,我指定要退回(硬编码)的汽车型号。因此,下面的SQL为每种模型返回 一条 记录: 现在有可能在没有联合的情况下使此SQL返回多个由某个字段指定的模型。例子: 我知道“拥有数量”没有意义,但是我需要一种方法来指定每个模型要返还多少辆汽车。 http://sqlfiddle.com/#!2/421e4/1/0 问题答案: 尝试像下面那样为每个组生成行号,然后将行数限制为im以下

  • 嘿,伙计们,我是拉威尔的新朋友。我有这张桌子 我如何能够获取每个科目的is_correct列计数? 谢谢伙计们!

  • 我有两张桌子。 产品品牌 我试图用最多的产品返回前十大品牌型号。 我试过了。 但是它不返回孔模型,只返回 品牌 计数 我也试过 但是我得到了错误: SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“brands.id”(SQL:选择count(*)作为从whereid=

  • 如何将以下查询转换为Laravel4雄辩ORM?