首頁 php框架 ThinkPHP 從實例講解ThinkPHP6聯表聚合查詢

從實例講解ThinkPHP6聯表聚合查詢

May 12, 2020 am 10:41 AM
thinkphp6

前些天有朋友問到了一個聯表的聚合查詢問題,想到此問題可能很多新手處理都比較棘手,現在特意分享出來。

我們有兩個資料表:

bus表:從實例講解ThinkPHP6聯表聚合查詢

user表:

從實例講解ThinkPHP6聯表聚合查詢

#需求:統計每個人上車數量

如何實現?

第一步:聯表

這種場景肯定需要兩個資料表聯表,我們先不考慮統計,我們先進行兩個數據表聯表。

 $data=Db::name('user')->alias('a')->join('bus b','a.user_id=b.user_id')->select()->toArray();
登入後複製

alias是別名,join是聯表的資料表,並且有聯表條件a.user_id=b.user_id,這樣我們就能夠取得到兩個資料表聯表的資料了。

從實例講解ThinkPHP6聯表聚合查詢

第二步:聚合查詢

#在做聚合查詢前,我們先看下官方手冊的教程。

從實例講解ThinkPHP6聯表聚合查詢

因為我們最終是要取得統計的數量,所以我們先確定用count()方法,所以我們修改查詢語句:

$data=Db::name('user')->alias('a')->field('count(b.user_id) AS c'')->join('bus b','a.user_id=b.user_id')->select()->toArray();
登入後複製

這其中c,是別名。

我們需要根據user_id這個欄位進行聚合查詢,是根據這個欄位統計的,所以我們一定是group(user_id),也就是依照user_id這個欄位進行分組。

我們繼續修改查詢語句:

$data=Db::name('user')->alias('a')->field('count(b.user_id) AS c')->join('bus b','a.user_id=b.user_id')->group('a.user_id')->select()->toArray();
登入後複製

這樣我們就實現了我們的最終查詢結果。

第三點:注意情況

在上面的查詢語句中,如果mysql是5.7版本,那麼就需要格外注意。例如在mysql5.7中在field中加入a.*,就會報錯:

 $data=Db::name('user')->alias('a')->field('a.*,count(b.user_id) AS c')->join('bus b','a.user_id=b.user_id')->group('a.user_id')->select()->toArray();
 [object Object]
登入後複製

為什麼會有這樣的錯誤呢?

從實例講解ThinkPHP6聯表聚合查詢

MYSQL5.7為了更好的效能,對sql_mode的限制。

ONLY_FULL_GROUP_BY: 對於GROUP BY聚合操作的時候,如果在SELECT中的列,沒有在GROUP BY中出現,那麼這個SQL是不合法的,因為列不在GROUP BY從句中,這也就是報錯所在。

我們可以修改mysql配置:

修改/etc/my.cnf,將sql_mode=中的only_full_group_by給刪掉

這樣一個聯表的聚合查詢就實現了,我們遇到這個問題的時候,不要心急,根據最終的需求,一步步的拆分一步步的實現。

以上是從實例講解ThinkPHP6聯表聚合查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)