## column 方法
### 1、功能:获取符合条件记录中各列字段所组成的数组
>[info] 注意有以下几个关键字:
> 1. 可以是一条记录,也可以多条记录,这与value方法不同的;
> 2. 返回值是一个数组,而非单值,这与value方法也不相同;
> 3. 可以返回一列数据,也可返回多列数组,返回多列时以二维数组展示。
### 2、源码:/thinkphp/library/think/db/Query.php
![](https://box.kancloud.cn/1cfdb8f2b90ba3ab0fd3675fa7637332_1304x842.png)
### 3、参数与返回值:
#### 1. 参数
| 序号 | 参数 | 说明 |
| --- | --- | --- |
| 1 | 字段名 | 表中存在的字段名称 |
| 2 | 键名 | 设置数组元素的键名,默认为参数中的第一个字段名 |
#### 2. 返回值
| 序号 | 参数 | 说明 |
| --- | --- | --- |
| 1 | 一维数组 | 当只有$field字段参数,且只有一个字段时,键名是从0开始索引数组 |
| 2 | 二维数组 | 当字段参数参数二个时,结果自动转为二维数组,当设置了第二个参数$key时,可指定数组元素键名 |
### 4、语法:
~~~
Db::table( '数据表名' ) -> where( 查询条件 ) -> column( '字段列表', '数组键名' ) ;
~~~
>[success] * 当字段列表不于二个字段时,结果是一维数组,键名为第一个字段
> * 当字段列表大于二个字段时,结果是二维数组,键名如不指定则为首字段
> * 如指定的键名,不在字段列表中,将做为首字段插入到字段列表中。
* * * * *
### 5、演示实例:
#### 任务1:查询id > 1020 记录中的name字段值
* 表中数据,红框内的是我们要操作的数据
![](https://box.kancloud.cn/cc02c1c036fc3d16dfb31268c1843716_781x382.png)
>[info]
>1. 参数只传入一个字段值时,返回一维数组;
>2. 因为没有传入指定键名,该数组的键名为默认的从0开始的索引数组
(索引数组:由键名从0开始的连续正整数构成的数组)
* Index.php 控制器文件:
~~~
<?php
namespace app\index\controller;
//导入数据库类
use think\Db;
class Index {
public function index() {
//1.返回name字段值数组的索引数组,键名为从0开始的整型连续数字
$result = Db::table('tp5_staff') //设置当前数据表tp5_staff
->where('id > 1020') // 设置查询条件 id > 1020
// 获取满足id>1020的所有记录的name字段值,打包到一维索引数组返回
->column('name');
//查询查询结果
dump($result);
}
}
~~~
* 运行结果:
~~~
//结果为一维数组,键名为默认的数定索引,键值是name字段值
array(5) {
[0] => string(6) "梦姑"
[1] => string(9) "段王爷"
[2] => string(9) "鲁大师"
[3] => string(9) "程序员"
[4] => string(6) "方方"
}
~~~
* * * * *
#### 任务2:查询id > 1020 记录中的name, age字段值
>[info]
>1. 参数只传入二个字段名,并不设置键名时,返回一维数组;
>2. 因为没有传入指定键名,该数组的键名为参数字段列表中的第一个
>3. 返回数组类型由做键名的字段值决定,数值型就是索引数组,字符或日期型就是关联数组
>4. 本例中,字段列表是:name,age,所以数组元素格式为:['name'] => age
* Index.php 控制器文件:
~~~
<?php
namespace app\index\controller;
//导入数据库类
use think\Db;
class Index {
public function index() {
//1.返回name字段值数组的索引数组,键名为从0开始的整型连续数字
$result = Db::table('tp5_staff') //设置当前数据表tp5_staff
->where('id > 1020') // 设置查询条件 id > 1020
// 获取满足id>1020的所有记录的name,age字段值,打包到一维数组返回
->column('name,age');
//查询查询结果
dump($result);
}
}
~~~
* 运行结果:
~~~
array(5) {
// 第一个字段名自动转为键名,第二个字段为值
["梦姑"] => int(18)
["段王爷"] => int(90)
["鲁大师"] => int(60)
["程序员"] => int(42)
["方方"] => int(90)
}
~~~
* 现在我们调整一下colume参数中的字段顺序
~~~
//将age 调整到 name 的前面
->column('age,name');
~~~
* 现在查询结果是:
~~~
//可以看到结果,恰好与上面是相反的,键名与值交换了位置
array(4) {
[18] => string(6) "梦姑"
[90] => string(6) "方方"
[60] => string(9) "鲁大师"
[42] => string(9) "程序员"
}
~~~
* * * * *
#### 任务3:查询id > 1020 记录中的name, age,hiredate字段值
>[info] 按上面的逻辑,我们知道,二个字段时,其中一个字段值以键名方式出现在结果中,那么三个字段时,怎么办呢?
>解决方案:<span style="color:red">用二维数组表示</span><br/>
>那么问题来了?> 哪个字段应该是二维数组中,各个元素的键名呢?
> 是和前面案例一样,取第一个字段名吗?我们试一下,就知道了~~~
* 现在的Index.php 控制器代码如下 :
~~~
<?php
namespace app\index\controller;
//导入数据库类
use think\Db;
class Index {
public function index() {
//1.返回name字段值数组的索引数组,键名为从0开始的整型连续数字
$result = Db::table('tp5_staff') //设置当前数据表tp5_staff
->where('id > 1020') // 设置查询条件 id > 1020
// 获取满足id>1020的所有记录的name,age字段值,打包到一维数组返回
->column('name,age,hiredate');
//查询查询结果
dump($result);
}
}
~~~
* 运行结果如下:
~~~
// 二维数组中,每个数组元素的键名,就是字段列表中的第一个字段名
array(5) {
["梦姑"] => array(3) {
["name"] => string(6) "梦姑"
["age"] => int(18)
["hiredate"] => string(10) "2012-10-10"
}
["段王爷"] => array(3) {
["name"] => string(9) "段王爷"
["age"] => int(90)
["hiredate"] => string(10) "2015-12-31"
}
["鲁大师"] => array(3) {
["name"] => string(9) "鲁大师"
["age"] => int(60)
["hiredate"] => string(10) "2012-09-09"
}
["程序员"] => array(3) {
["name"] => string(9) "程序员"
["age"] => int(42)
["hiredate"] => string(10) "2008-12-29"
}
["方方"] => array(3) {
["name"] => string(6) "方方"
["age"] => int(90)
["hiredate"] => string(10) "2015-12-31"
}
}
~~~
* * * * *
#### 任务4:查询id > 1020 记录中的name, age字段值,指定键名为:age
>[info] 我们前面一直在用默认值来设定数组的键名,其实就是可以设定的。
>本例中,我们人为设定为:age
* Index.php 控制器文件:
~~~
<?php
namespace app\index\controller;
//导入数据库类
use think\Db;
class Index {
public function index() {
//1.返回name字段值数组的索引数组,键名为从0开始的整型连续数字
$result = Db::table('tp5_staff') //设置当前数据表tp5_staff
->where('id > 1020') // 设置查询条件 id > 1020
// 获取满足id>1020的所有记录的name,age字段值,打包到一维数组返回
->column('name,age','age');
//查询查询结果
dump($result);
}
}
~~~
* 运行结果:
~~~
//这和前面,通过人为调整字段顺序,设定键名的结果是一样的
//显然,这种试更加的灵活
array(4) {
[18] => string(6) "梦姑"
[90] => string(6) "方方"
[60] => string(9) "鲁大师"
[42] => string(9) "程序员"
}
~~~
* * * * *
>[warning] 我们再大胆猜想一下,能不能指定一个不在字段列表中出现的字段,当做键名呢?例如,当前字段列表是:name,age,而我们指定键名为:hiredate,是否可行?请看下面案例:
#### 任务5:查询id > 1020 记录中的name, age字段值,指定键名为:hiredate
* Index.php 控制器文件:
~~~
<?php
namespace app\index\controller;
//导入数据库类
use think\Db;
class Index {
public function index() {
//1.返回name字段值数组的索引数组,键名为从0开始的整型连续数字
$result = Db::table('tp5_staff') //设置当前数据表tp5_staff
->where('id > 1020') // 设置查询条件 id > 1020
// 获取满足id>1020的所有记录的name,age字段值,打包到一维数组返回
->column('name,age','hiredate');
//查询查询结果
dump($result);
}
}
~~~
* 查询结果如下(神奇一幕出现了):
>[success] * 做为键名的hiredate字段,原本不在字段列表中,现在却自动被添加到字段列表中并显示出来了。
> * 所以,当前的字段列表变成了: hiredate,name,age,因为你指定的键名是hiredate,所以这个hiredate字段,也理所当然的排到字段列中的第一位
~~~
//指定的键名,自动插入到当前字前列表的第一位
//因为超过了二个字段,因为结果是二维数组
array(4) {
["2012-10-10"] => array(3) {
["hiredate"] => string(10) "2012-10-10"
["name"] => string(6) "梦姑"
["age"] => int(18)
}
["2015-12-31"] => array(3) {
["hiredate"] => string(10) "2015-12-31"
["name"] => string(6) "方方"
["age"] => int(90)
}
["2012-09-09"] => array(3) {
["hiredate"] => string(10) "2012-09-09"
["name"] => string(9) "鲁大师"
["age"] => int(60)
}
["2008-12-29"] => array(3) {
["hiredate"] => string(10) "2008-12-29"
["name"] => string(9) "程序员"
["age"] => int(42)
}
}
~~~
### 6、总结:
>[info] column 方法,将查询结果以一种很灵活的方式返回,让程序员有了更大的发挥空间处理数据,一定要熟练掌握它
- 前言[随时更新]
- ThinkPHP 5数据库重构
- 开发环境
- 1.ThinkPHP5开发环境(Mac版)
- 2.ThinkPHP5开发环境(Win版)
- MySQL快速复习
- 1.数据库操作
- 2.数据表操作
- 1.创建数据表 (重点)
- 2.添加数据表记录
- 3.查询数据表(重点)
- 4.更新数据表
- 5.编辑数据表结构(重点)
- 6_复制数据表
- 7.删除数据和表
- 连接数据库
- 1.数据库配置文件database.php
- 2.Db类静态方法connect()
- 3.模块中的配置文件config.php
- MySQL原生查询
- 1.读操作query
- 2.写操作execute
- 选择数据表
- 1.table与setTable方法
- 2.name方法
- 3.db助手函数
- 4.alias方法
- 结果集查询
- 1.find方法
- 2.select方法
- 3.fetchSql方法
- 4.value方法
- 5.column方法
- 6.field方法
- 新增数据
- 1.insert_单条添加
- 2.insertAll_批量添加
- 3_db_助手函数添加
- 更新数据
- 1.update方法
- 2.setField更新字段
- 3_自增自减与延时更新
- 删除数据
- 1.delete方法
- 查询方法
- 1.getTableInfo方法
- 2.where方法
- 3.whereOr方法
- 4.混合查询(闭包实现)
- 表达式查询
- 1.表达式查询(重点)
- 2.exp通用查询
- 分组查询
- 1.group方法
- 2.having方法
- 排序分页查询
- 1.order方法
- 2.limit方法
- 3.page方法
- 聚合查询
- 时间查询
- 1.where方法
- 2.whereTime方法
- 高级查询
- 1.快捷查询
- 2.区间查询
- 3.批量查询
- 4.Query对象查询
- 5.混合查询
- 视图查询
- view方法
- 子查询
- 1.select方法
- 2.fetchSql方法
- 3.buildSql方法
- 4.闭包子查询
- 总结/参考
- 1.方法参数类型总结
- 2.查询/子查询/连接查询