## column 方法
### 1、功能:獲取符合條件記錄中各列字段所組成的數組
>[info] 注意有以下幾個關鍵字:
> 1. 可以是一條記錄,也可以多條記錄,這與value方法不同的;
> 2. 返回值是一個數組,而非單值,這與value方法也不相同;
> 3. 可以返回一列數據,也可返回多列數組,返回多列時以二維數組展示。
### 2、源碼:/thinkphp/library/think/db/Query.php

### 3、參數與返回值:
#### 1. 參數
| 序號 | 參數 | 說明 |
| --- | --- | --- |
| 1 | 字段名 | 表中存在的字段名稱 |
| 2 | 鍵名 | 設置數組元素的鍵名,默認為參數中的第一個字段名 |
#### 2. 返回值
| 序號 | 參數 | 說明 |
| --- | --- | --- |
| 1 | 一維數組 | 當只有$field字段參數,且只有一個字段時,鍵名是從0開始索引數組 |
| 2 | 二維數組 | 當字段參數參數二個時,結果自動轉為二維數組,當設置了第二個參數$key時,可指定數組元素鍵名 |
### 4、語法:
~~~
Db::table( '數據表名' ) -> where( 查詢條件 ) -> column( '字段列表', '數組鍵名' ) ;
~~~
>[success] * 當字段列表不于二個字段時,結果是一維數組,鍵名為第一個字段
> * 當字段列表大于二個字段時,結果是二維數組,鍵名如不指定則為首字段
> * 如指定的鍵名,不在字段列表中,將做為首字段插入到字段列表中。
* * * * *
### 5、演示實例:
#### 任務1:查詢id > 1020 記錄中的name字段值
* 表中數據,紅框內的是我們要操作的數據

>[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.查詢/子查詢/連接查詢