原生方式
使用Db进行原生查询
query
或者写入execute
,并且支持参数绑定,命名占位符绑定。
query查询的是一条数据的是一维数组,多条数据是二维数组,如果查询结果为空,则为一维空数组
execute执行的结果是受影响的行数
- 参数绑定方式
Db::query('select * from think_user where id=?',[8]);
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
- 命名占位符绑定方式
Db::query('select * from think_user where id=:id',['id'=>8]);
Db::execute('insert into think_user (id, name) values (:id, :name)',['id'=>8,'name'=>'thinkphp']);
查询构造器查询
-
查询数据
- find,find 方法查询结果不存在,返回 null,如果存在则返回第一条数据,一维数组
- select,select 方法查询结果不存在,返回空数组,默认情况下,如果存在,select方法返回的都是二维数组。
- value,value 方法查询结果不存在,返回 null,如果存在,则返回第一条的某个字段值
- column,column 方法查询结果不存在,返回空数组,永远是一维数组,可以指定数组的索引
-
添加数据
- insert,insert 方法添加数据成功返回添加成功的条数,insert 正常情况返回 1
- getLastInsID
- insertGetId
- insertAll,insertAll 方法添加数据成功返回添加成功的条数
-
更新数据
- update,update 方法返回影响数据的条数,没修改任何数据返回 0
- setField, setField 方法返回影响数据的条数,没修改任何数据字段返回 0
-
删除数据
- delete,delete 方法返回影响数据的条数,没有删除返回 0
-
查询表达式
- where(字段名,表达式,查询条件)
- whereOr(字段名,表达式,查询条件)
表达式 | 含义 |
---|---|
EQ、= | 等于(=) |
NEQ、<> | 不等于(<>) |
GT、> | 大于(>) |
EGT、>= | 大于等于(>=) |
LT、< | 小于(<) |
ELT、<= | 小于等于(<=) |
LIKE | 模糊查询 |
[NOT] BETWEEN | (不在)区间查询 |
[NOT] IN | (不在)IN 查询 |
[NOT] NULL | 查询字段是否(不)是NULL |
[NOT] EXISTS | EXISTS查询 |
EXP | 表达式查询,支持SQL语法 |
> time | 时间比较 |
< time | 时间比较 |
between time | 时间比较 |
notbetween time | 时间比较 |
-
链式操作
- where,支持表达式查询和字符串条件
$map['id'] = ['>',1]; $map['mail'] = ['like','%thinkphp@qq.com%']; Db::table('think_user')->where($map)->select(); Db::table('think_user')->where('type=1 AND status=1')->select();
- table,table方法主要用于指定操作的数据表
- alias,alias用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等
- field,field方法属于模型的连贯操作方法之一,主要目的是标识要返回或者操作的字段,可以用于查询和写入操作
- order,order方法属于模型的连贯操作方法之一,用于对操作的结果排序
Db::table('think_user')->where('status=1')->order('id desc,status')->limit(5)->select();
- limit,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多
Db::table('think_user') ->where('status=1') ->field('id,name') ->limit(10) ->select(); Db::table('think_article')->limit(10,25)->select();
- page,是完全为分页查询而诞生的一个人性化操作方法
Db::table('think_article')->page(1,10)->select(); // 和下面的用法等效 Db::table('think_article')->page('1,10')->select();
- group,根据一个或多个列对结果集进行分组,group方法只有一个参数,并且只能使用字符串
Db::table('think_user') ->field('user_id,test_time,username,max(score)') ->group('user_id,test_time') ->select();
- having,用于配合group方法完成从分组的结果中筛选(通常是聚合条件)数据
Db::table('think_user') ->field('username,max(score)') ->group('user_id') ->having('count(test_time)>3') ->select();
- join,不同类型的join操作会影响返回的数据结果
连接类型 返回结果 INNER JOIN 等同于 JOIN(默认的JOIN类型),如果表中有至少一个匹配,则返回行 LEFT JOIN 即使右表中没有匹配,也从左表返回所有的行 RIGHT JOIN 即使左表中没有匹配,也从右表返回所有的行 FULL JOIN 只要其中一个表中存在匹配,就返回行 Db::table('think_artist') ->alias('a') ->join('think_work w','a.id = w.artist_id') ->join('think_card c','a.card_id = c.id') ->select();
- fetchSql,fetchSql用于直接返回SQL而不是执行查询,适用于任何的CURD操作方法
$result = Db::table('think_user')->fetchSql(true)->find(1)
-
聚合查询
方法 | 说明 |
---|---|
count | 统计数量,参数是要统计的字段名(可选) |
max | 获取最大值,参数是要统计的字段名(必须) |
min | 获取最小值,参数是要统计的字段名(必须) |
avg | 获取平均值,参数是要统计的字段名(必须) |
sum | 获取总分,参数是要统计的字段名(必须) |