我有一個表,除其他列外,還包含一列瀏覽器版本。我只是想從記錄集中知道每種類型的瀏覽器有多少個。我的代碼是:$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 回答

慕仙森
TA貢獻1827條經驗 獲得超8個贊
實現此目的的一種方法是在字符串中查找瀏覽器名稱,并將它們解析為查詢中的瀏覽器名稱。所以類似的東西Mobile Safari 15.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"

心有法竹
TA貢獻1866條經驗 獲得超5個贊
您可以使用 SUBSTRING_INDEX 函數來提取瀏覽器名稱的第一個字符串:
$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();
- 2 回答
- 0 關注
- 118 瀏覽
添加回答
舉報
0/150
提交
取消