ThinkPHP查询

查询方式

Thinkphp提供了三种基本的查询方式:字符串条件查询、索引数组条件查询和对象条件查询、在大多数情况下,推荐使用索引数组和对象方式为查询条件,因为会更加安全
1、使用字符串作为条件查询
//字符串作为条件查询
$user = M('User');
var_dump($user->where(' id = 1 AND user = “蜡笔小新” ')->select());

PS:where查询方法里面只要包含条件即可,多个条件加上AND等链接符即可,我们会在SQL连贯操作详细学习。

2、使用索引数组作为查询条件
//索引数组作为条件查询
$user = M('User');
$condition[' user '] = '蜡笔小新';
$condition[' id'] = '蜡笔小新';
var_dump($user->where($condition)->select());

PS:索引数查询的默认逻辑关系是AND,如果想改变为OR,可以使用_logic定义查询逻辑

基于上面的代码增加如下一行:
$condition['_logic'] = 'OR'  //将默认AND改为OR

3、使用对象方式来查询
//对象作为条件查询
$user = M('User');
$condition = new \stdClass();
$condition->id = 1;
$condition->user = '蜡笔小新'
var_dump($user->where($condition)->select());

PS:stdClass类是PHP内置的类,可以理解为一个空雷,在这里可以理解为把条件的字段作为成员保存在stdClass类里,而这里的‘\’是将命名空间设置为根目录,否则会导致当前目录找不到次类。
PS:使用对象和数组查询,效果是一样的,可以互换,在大多数情况下,tinkPHP推荐使用数组形式更加高效

表达式查询

对于那些药实现模糊判断的查询,比如大于、等于、小于之类的SQL查询,可以使用表达式查询方式
查询表达式格式:$map['字段名'] = array(' 表达式 ' , ‘ 查询条件 ’);
表达式查询表

表达式                            含义
EQ                               等于
NEQ                              不等于
GT                               大于
EGT                              大于等于
LT                               小于
ELT                              小于等于
[NOT]LIKE                        模糊查询
[NOT]BETWEEN                    (不在)区间查询
[NOT]IN                         (不在)IN查询
EXP                              表达式查询,支持SQL语法

PS:表达式不区分大小写
//查询表达式:$map['字段名'] = array('表达式',"查询条件");
$user = M('User');

//等于
$map['id'] = array('eq',1);//id这个字段 的值等于(eq)1

//不等于
$map['id'] = array('neq',1);//id这个字段 的值不等于(neq)1,这时候会查出所有id不等于1的值

//模糊查询
$map['user'] = array('like','%小%');//模糊查询user里面带小字的

//模糊查询的数组方式
$map['user'] = array('like' , array('%小%', '%腊%'), 'AND');//又包含小的  又包含腊的  如果不写AND 那就当是或了。会查出既包含小的,又包含腊的

//区间查询
$map['id'] = array('between' , '1,3') //查询id在1到3区间的条目

//区间查询数组形式
$map['id'] = array('between', array('1','3'));//查询id在1到3之间的条目

//区间查询 不在范围之内的
$map['id'] = array('not between', '1,3');//查询id 不在1到3的范围之内的所有元素

//IN区间查找
$map['id'] = array('in' , '1,2,4');//查询id等于1,2,4的条目

//not IN 查找
$map['id'] = array('not in' , '1,2,4');//查询id 不等于1,2,4的条目。

//小于查询
$map['id'] = array('exp' , '<1');//查询id
var_dump($user->where($map)->select());

快捷查询

//快捷查询方式是一中多字段查询的简化写法,在多个字段之间用 ' | '隔开表示OR,用‘&’隔开表示AND
1、不同字段相同查询条件
//使用相同的查询条件
$user = M('User');
$map[' user|email '] = 'a';   // ' | '换成‘ & ’变成AND
var_dump($user->where($map)->select());

2、不同字段不同查询条件
//使用不同查询条件
$user = M(' User ');
$map[' id&user '] = array(1, '蜡笔小新',_multi=>true);
var_dump($user->where($map)->select());

PS:设置‘_multi’为true,是为了让id对应1,让user对应‘蜡笔小新’,否则就会出现id对应了1还要对应‘蜡笔小新’的情况,而且,这设置要在放在数组最后

//支持使用表达式结合快捷查询
$user = M('User');
$map[' id&user '] = array(array(' gt ' ,0), '蜡笔小新' ,'_multi '=>true);
var_dump($user->where($map)->select());

区间查询

ThinkPHP支持对某个字段的区间查询
//区间查询
$user = M('User');
$map[' id '] = array( array(' gt ' , 1 ) , array( ' lt ' , 4 ) );//意思是id大于1 和id小于4的。
var_dump($user->where($map)->select());

//第三个参数设置逻辑OR
$user = M(' User ');
$map[' id '] = array( array(' gt ' , 1) , array( ' lt ' , 4) , 'OR');
var_dump($user->where($map)->select);

组合查询

组合查询是基于索引数组查询方式的一个拓展性查询,添加了字符串查询(_string),复合查询(_complex),请求字符串查询(_query),由于采用的是索引数组,重复的会被覆盖。
//字符串查询(_string)
$user = M(User);
$map[' id '] = array(' eq ' , 1);
$map[' _string '] = ' user= "蜡笔小新" AND mail = “[email protected]” ';
var_dump($user->where($map)->select());

//请求字符串查询(_query)
$user = M('User');
$map[' id '] = array('eq' ,1);
$map['_query'] = 'user = 蜡笔小新&maile = [email protected]&_logic=OR';
var_dump($user->where($map)->select());

PS:这总方式是URL方式,不需要加引号

//复合查询(_complex)
$user = M(User);
$where[' user '] = array(' like ' , ' %小% ');
$where['id'] = 1;
$where['_logic'] = 'OR'
$map['_complex'] = $where;
$map['id'] = 3;
$map['_logic'] = 'OR'
var_dump($user->where($map)-select());

PS:复合查询可以构建更加复杂的查询,这里id=1或者id = 3可以构建实现。

统计查询

//Tinkphp提供了一些统计查询的方法
//数据总条数,遇到NULL不统计
$user = M('User');
var_dump($user->count(' mail ' ) );

//最大值
$user = M('User');
var_dump($user->max(' id ' ) );

//最小值
$user = M('User');
var_dump($user->min(' id ' ) );

//平均值
$user = M('User');
var_dump($user->avg(' id '));

//求总和
$user = M(' User ');
var_dump($user->sum(' id '));

动态查询

借助PHP5语言的特性,ThinkPhp实现了动态查询
1、getBy动态查询
//查找[email protected]的数据
$user = M('User');
var_dump($user->getByMail('[email protected]'));
2、getFieldBy动态查询
//通过user得到相应id值
$user = M('User');
var_dump($user->getFieldByUser('路飞',‘id’));

SQL查询

ThikPHP支持原生SQL查询
1、query读取
//查询结果集,如果采用分布式读写分离,即始终在读服务器执行。
$user = M('User');
var_dump($user->query('SELECT *FROM think_user'));

2、execute写入
//更新和写入,如果采用分布式读写分离,则始终在写服务器执行
$user = M('User');
var_dump($user->execute('UPDATE think_user set user=''蜡笔大新“ WHERE id=1' ));
PS:由于子查询用了不少连贯操作,我们会在连贯才做讲解。

//实例化Model类
//字符串作为条件查询
$user = M('User');
//查出user表中的 id=1的 名称为蜡笔小新的数据。
var_dump($user->where('id=1 AND user="蜡笔小新" ')->select())




-----------------分割线-----------------



-----------------分割线-----------------





--------------------------分割线----------------------

####快捷查询
快捷查询方式是一种多字段查询的简化写法,在多个字段之间用'|'隔开表示OR,用‘&’隔开表示AND

1、不同字段相同查询条件
//使用字段相同查询条件
$user = M('User');
$map['user|email'] = 'a';        //'|'换成‘&’变成AND

2、不同字段不同查询条件
//使用不同查询条件
$user = M('User');
$map['id&user'] = array(1,'蜡笔小新',‘_multi’=>true);//这句代码的意思是id和user分别对应着1  和 蜡笔小新  _multi=>true意思是一一对应。如果不写这个得话,会出现id对应了1还要对应‘蜡笔小新’的情况,而且,这设置要放在数组最后。

//支持使用表达式结合快捷查询
$user = M('User');
$map['id&user'] = array(array('gt',0),'蜡笔小新',‘_multi’=>true);//gt的意思是大于  整体的意思是 id大于0的 user是蜡笔小新的 这一条。

----------------分割线----------
###组合查询

$user = M('User');
$map['id'] = array('eq',1);
$map['_string'] = 'user="蜡笔小新" AND email=“[email protected]” ';//
var_dump($user->where($map)->select());

六、统计查询






你可能感兴趣的:(ThinkPHP查询)