前言[随时更新]
MySQL快速复习
MySQL原生查询
选择数据表
删除数据
聚合查询
时间查询
视图查询
子查询
总结/参考
注意有以下几个关键字:
- 可以是一条记录,也可以多条记录,这与value方法不同的;
- 返回值是一个数组,而非单值,这与value方法也不相同;
- 可以返回一列数据,也可返回多列数组,返回多列时以二维数组展示。

| 序号 | 参数 | 说明 |
|---|---|---|
| 1 | 字段名 | 表中存在的字段名称 |
| 2 | 键名 | 设置数组元素的键名,默认为参数中的第一个字段名 |
| 序号 | 参数 | 说明 |
|---|---|---|
| 1 | 一维数组 | 当只有$field字段参数,且只有一个字段时,键名是从0开始索引数组 |
| 2 | 二维数组 | 当字段参数参数二个时,结果自动转为二维数组,当设置了第二个参数$key时,可指定数组元素键名 |
Db::table( '数据表名' ) -> where( 查询条件 ) -> column( '字段列表', '数组键名' ) ;
- 当字段列表不于二个字段时,结果是一维数组,键名为第一个字段
- 当字段列表大于二个字段时,结果是二维数组,键名如不指定则为首字段
- 如指定的键名,不在字段列表中,将做为首字段插入到字段列表中。

- 参数只传入一个字段值时,返回一维数组;
- 因为没有传入指定键名,该数组的键名为默认的从0开始的索引数组
(索引数组:由键名从0开始的连续正整数构成的数组)
<?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) "方方"
}
- 参数只传入二个字段名,并不设置键名时,返回一维数组;
- 因为没有传入指定键名,该数组的键名为参数字段列表中的第一个
- 返回数组类型由做键名的字段值决定,数值型就是索引数组,字符或日期型就是关联数组
- 本例中,字段列表是:name,age,所以数组元素格式为:['name'] => age
<?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)
}
//将age 调整到 name 的前面
->column('age,name');
//可以看到结果,恰好与上面是相反的,键名与值交换了位置
array(4) {
[18] => string(6) "梦姑"
[90] => string(6) "方方"
[60] => string(9) "鲁大师"
[42] => string(9) "程序员"
}
按上面的逻辑,我们知道,二个字段时,其中一个字段值以键名方式出现在结果中,那么三个字段时,怎么办呢?
解决方案:用二维数组表示
那么问题来了?> 哪个字段应该是二维数组中,各个元素的键名呢?
是和前面案例一样,取第一个字段名吗?我们试一下,就知道了~~~
<?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"
}
}
我们前面一直在用默认值来设定数组的键名,其实就是可以设定的。
本例中,我们人为设定为:age
<?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) "程序员"
}
我们再大胆猜想一下,能不能指定一个不在字段列表中出现的字段,当做键名呢?例如,当前字段列表是:name,age,而我们指定键名为:hiredate,是否可行?请看下面案例:
<?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);
}
}
- 做为键名的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)
}
}
column 方法,将查询结果以一种很灵活的方式返回,让程序员有了更大的发挥空间处理数据,一定要熟练掌握它