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 = “xiaoxin@163.com” ';
var_dump($user->where($map)->select());

//请求字符串查询(_query)
$user = M('User');
$map[' id '] = array('eq' ,1);
$map['_query'] = 'user = 蜡笔小新&maile = xiaoxin@163.com&_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动态查询
//查找mail=xiaoxin@163.com的数据
$user = M('User');
var_dump($user->getByMail('xiaoxin@163.com'));
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=“xiaoxin@163.com” ';//
var_dump($user->where($map)->select());

六、统计查询






最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容