首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

ThinkPHP 查詢技巧大全:從基礎到進階實戰

     編輯:PHP 相關知識

前言

ThinkPHP 查詢功能強大靈活,本文系統整理 8 大類查詢技巧,含 Where 條件、區間、組合、複合、統計、定位、SQL、動態查詢,附實戰代碼範例。

一、基本 Where 條件查詢(四種寫法)

1. 字串模式

$user = M('user');
$list = $user->where('id > 5 AND id < 9')->select();

2. 陣列模式(推薦)

$list = $user->where(['username' => 'www.phpernote.com'])->select();

3. 物件模式

$a = new stdClass();
$a->username = 'www.phpernote.com';
$list = $user->where($a)->select();

4. 查詢表達式(核心功能)

表達式SQL 對應範例
EQ=['username' => ['eq', 'value']]
NEQ!=['username' => ['neq', 'value']]
GT>['id' => ['gt', 10]]
EGT>=['id' => ['egt', 10]]
LT<['id' => ['lt', 20]]
ELT<=['id' => ['elt', 20]]
LIKELIKE['name' => ['like', 'peng%']]
[NOT] BETWEEN區間['id' => ['between', '10,20']]
[NOT] IN集合['id' => ['in', '1,2,3']]
EXP原生 SQL['id' => ['exp', 'IN (1,2,3)']]
簡寫:['username' => 'value'] 等同 ['username' => ['eq', 'value']]

二、區間查詢

$data['id'] = [['gt', 20], ['lt', 23], 'and'];  // 20 < id < 23
$list = $user->where($data)->select();

三、組合查詢(_logic)

$data['username'] = 'pengyanjie';
$data['password'] = ['eq', 'pengyanjie'];
$data['id'] = ['lt', 30];
$data['_logic'] = 'or';  // 全部條件 OR 關係
$list = $user->where($data)->select();

四、複合查詢(_complex)

$where['username'] = ['eq', 'pengyanjie'];
$where['password'] = ['like', 'p%'];
$where['_logic'] = 'or';

$data['_complex'] = $where;
$data['id'] = ['lt', 30];  // AND 關係
// 相當於:(id < 30) AND ((username = pengyanjie) OR (password LIKE p%))
$list = $user->where($data)->select();

五、統計查詢

echo $user->count();
echo $user->max('id');
echo $user->where('id < 30')->min('id');
echo $user->avg('id');
echo $user->sum('id');

六、定位查詢(需 AdvModel)

$user = new AdvModel('user');
$list = $user->order('id desc')->getN(2);   // 第 3 筆(索引 2)
$list = $user->order('id desc')->last();    // 最後一筆
$list = $user->order('id desc')->first();   // 第一筆

七、原生 SQL 查詢

// 更新/寫入用 execute
$Model = new Model();
$Model->execute("UPDATE think_user SET name='thinkPHP' WHERE status=1");

// 查詢用 query
$user = M();
$list = $user->query('SELECT * FROM aoli_user ORDER BY id DESC');

八、動態查詢(魔術方法)

$user = M('user');
$list = $user->getByUsername('pengyanjie');  // 依 username 查詢

$user = new AdvModel('user');
$list = $user->top5();  // 前 5 筆(需模型定義 top5 方法)

最佳實踐建議

  • 優先使用陣列/表達式模式,避免 SQL 注入風險
  • 複雜查詢善用 _complex 結構化表達
  • 統計查詢直接呼叫方法,效能優於手寫 SQL
  • 原生 SQL 僅用於極複雜或跨表關聯場景
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved