ThinkPHP5开发连载三十二之数据库查询构造器链式操作的方法三

上一篇文章讲解“数据库查询构造器-链式操作的方法二”,本篇文章讲解“数据库查询构造器-链式操作的方法三”。

九、group

GROUP方法通常用于结合合计函数,根据一个或多个列对结果集进行分组。

group方法只有一个参数,并且只能使用字符串。

1)对一个字段进行分组

在Index控制器中,新建groupQuery方法:

预览:

2)对多个字段进行分组

修改Index控制器下的groupQuery方法:

预览:

十、having

HAVING方法用于配合group方法完成从分组的结果中筛选(通常是聚合条件)数据。

having方法只有一个参数,并且只能使用字符串。

在Index控制器中,新建hQuery方法:

预览:

十一、join

JOIN方法用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

1. join的类型

join通常有下面几种类型,不同类型的join操作会影响返回的数据结果。

2. join的参数

1)join

要关联的(完整)表名以及别名

2)condition

关联条件。可以为字符串或数组,为数组时每一个元素都是一个关联条件。

3)type

关联类型。可以为:'INNER'、'LEFT'、'RIGHT'、'FULL',不区分大小写,默认为'INNER'。

3. join的使用

1)join的基本使用

在Index控制器中,新建joinQuery方法:

预览:

2)join的其他方式(默认为inner join)

修改Index控制器下的joinQuery方法:

预览:

3)表名为子查询

修改Index控制器下的joinQuery方法:

预览:

十二、union

UNION操作用于合并两个或多个SELECT语句的结果集。

1)union的基本使用

在Index控制器中,新建unQuery方法:

预览:

2)union的闭包用法

修改Index控制器下的unQuery方法:

预览:

注意:

1. 或者如下方式:

Db::field('name')

->table('think_user')

'SELECT name FROM think_type',

'SELECT name FROM think_test',

])

->select();

3)unionAll方法

修改Index控制器下的unQuery方法:

预览:

注意:

1. 或者如下方式:

Db::field('name')

->table('think_user')

'SELECT name FROM think_user_1',

'SELECT name FROM think_user_2'],

true)

->select();

2. 每个union方法相当于一个独立的SELECT语句。

3. UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

十三、distinct

DISTINCT方法用于返回唯一不同的值,去重复。

例如:数据库表中有以下数据

在Index控制器中,新建disQuery方法,不使用distinct方法,正常查询

预览:

修改Index控制器下的disQuery方法,将重复的数据去重复

不使用distinct方法时,查询重复数据会正常显示,如果要将重复数据去除,需要使用distinct方法。

预览:

注意:

1. distinct方法的参数是一个布尔值。

ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员

关注卓象程序员,定期发布技术文章

下一篇讲解“查询构造器-链式操作的方法四”

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180830A0O1GR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券