Rumah rangka kerja php ThinkPHP 从实例讲解ThinkPHP6联表聚合查询

从实例讲解ThinkPHP6联表聚合查询

May 12, 2020 am 10:41 AM
thinkphp6

前些天有朋友问到了一个联表的聚合查询问题,想到此问题可能很多新手处理都比较棘手,现在特意分享出来。

我们有两个数据表:

bus表:QQ截图20200512103514.jpg

user表:

54.jpg

需求:统计每个人上车数量

如何实现呢?

第一步:联表

这种场景肯定需要两个数据表联表,我们先不考虑统计,我们先进行两个数据表联表。

 $data=Db::name('user')->alias('a')->join('bus b','a.user_id=b.user_id')->select()->toArray();
Salin selepas log masuk

alias是别名,join是联表的数据表,并且有联表条件a.user_id=b.user_id,这样我们就能够获取到两个数据表联表的数据了。

QQ截图20200512103749.jpg

第二步:聚合查询

在做聚合查询前,我们先看下官方手册的教程。

8.jpg

因为我们最终是要获取统计的数量,所以我们首先确定用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();
Salin selepas log masuk

这其中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();
Salin selepas log masuk

这样我们就实现了我们的最终查询结果。

第三点:注意情况

在上面的查询语句中,如果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]
Salin selepas log masuk

为什么会有这样的错误呢?

QQ截图20200512104036.jpg

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给删掉

这样一个联表的聚合查询就实现了,我们遇到这个问题的时候,不要心急,根据最终的需求,一步步的拆分一步步的实现。

Atas ialah kandungan terperinci 从实例讲解ThinkPHP6联表聚合查询. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)