Thinkphp
Allen 2022-10-23 17:07:44 2837 0 0 0 0
Thinkphp,Thinkphp笔记,Thinkphp6学习笔记09:14.聚合.原生.子查询
14.聚合.原生.子查询
学习要点:
1.聚合查询2.子查询3.原生查询
一.聚合查询
1.使用count()方法,可以求出所查询数据的数量;
Db::name('user')->count();
select count(*)...

2. count()可设置指定id,比如有空值(Null)的uid,不会计算数量;
Db::name('user')->count('uid');
select count(uid)...
3.使用max()方法,求出所查询数据字段的最大值;
Db: : name('user')->max('price');
4.如果max()方法,求出的值不是数值,则通过第二参数强制转换;
Db::name('user')->max('email', false);
5.使用min()方法,求出所查询数据字段的最小值,也可以强制转换;
Db::name('user')->min('price');
Db::name('user')->min('email', false);
6.使用avg()方法,求出所查询数据字段的平均值;
Db::name('user')->avg('price');
7.使用sum()方法,求出所查询数据字段的总和;
Db::name('user')->sum('price');

二.子查询
1.使用fetchsql()方法,可以设置不执行sQL,而返回sQL语句,默认true;
Db: : name('user')->fetchsql(true)->select();
参数=true返回sql:select * from tp_user
参数=false返回查询结果

2.使用buildsql()方法,也是返回SQL语句,不需要再执行select(),且有括号;
Db::name('user')->buildSql(true);
返回:"(select * from tp_user)"

3.结合以上方法,我们实现一个子查询;
//求出所有男的uid
$subQuery = Db::name('two')->field('uid')->where('gender','男')->buildsql(true);
返回:"(select uid from tp_two where gender='男')"
$result = Db::name('one')->where('id','exp','in'.subQuery)->select();
返回:select * from tp_one where (id in (select uid from tp_two where gender='男'))

4.使用闭包的方式执行子查询;(第二种方法)
$result = Db :: name('one')->where('id','in', function ($query){
$query->name('two')->field('uid')->where('gender','男'); //此处加->buildsql(true),select()都可以,也可以不加
})->select();
返回的Sql都一样,结果也一样。
下面同:
$result = Db::name('one')->where('id','in', function ($query){
$query->name('two')->where('gender',‘男')->field('uid');})->select();
...
三.原生查询
1.使用query()方法,进行原生sQL查询,适用于读取操作,sQL错误返回false;
Db::query('select * from tp_user');
2.使用execute方法,进行原生sQL更新写入等,SQL错误返回false;
Db : :execute('update tp_user set username="孙悟空" where id=29');


【版權聲明】
本文爲原創,遵循CC 4.0 BY-SA版權協議!轉載時請附上原文鏈接及本聲明。
原文鏈接:https://tdlib.com/am.php?t=WaMspj7f4b1C
Tag: Thinkphp Thinkphp笔记
歡迎評論
未登錄,
請先 [ 註冊 ] or [ 登錄 ]
(一分鍾即可完成註冊!)
返回首頁     ·   返回[Thinkphp]   ·   返回頂部