一、查询方式
ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用数组或者对象来作为查询条件,因为更加安全。
1.使用字符串作为查询条件
这是最传统的方式,但是安全性不高,eg:
$User = M('User'); $User->where('name="tom" and status=1')->select();
最后生成的SQL的语句是:
SELECT * FROM t_user where name="tom" and status=1;
2.使用数组作为查询条件
这是最常用的查询方式,
eg:
$User = M('User'); $condition['name'] = 'tom'; $condition['status'] = 1; $User->where($condition)->select(); //把查询条件传入查询方法
生成的SQL语句同上
如果进行多字段查询,那么字段之间的默认逻辑关系是逻辑与AND,但是用下面的规则可以更改默认的逻辑判断,通过使用_logic定义查询逻辑:
$User = M('User'); $condition['name'] = 'thinkphp'; $conditon['account'] = 'thinkphp'; $conditon['_logic'] = 'OR'; $User->where($condition)->select();
生成的SQL语句是:
SELECT * FROM t_user WHERE 'name' = 'thinkphp' OR 'account' = 'thinkphp';
3.使用对象方式来查询
$user = M('User'); $condition = new stdClass(); $condition->name = 'thinkphp'; $condition->status = 1; $User->where($condition)->select();
备注:
(1).stdClass在PHP5才开始被流行,而stdClass也是zend的一个保留类。stdClass是PHP的一个基类,所有的类几乎都继承这个类,所以任何时候都可以被new,可以让这个变量成为一个object。同时,这个基类又有一个特殊的地方,都没有方法。
(2).使用对象方式查询和使用数组查询的效果是相同的,并且是可以互换的,大多数情况下,我们建议采用数组方式更加高效。
二、表达式查询
查询表达式的使用条件:
$map['字段名'] = array('表达式','查询条件');
表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:
表达式 | 含义 | 相当于 |
EQ | 等于(=) | equal |
NEQ | 不等于(<>) | not equal |
GT |
大于(>) | greater |
EGT | 大于等于(>=) | equal or greater |
LT | 小于(<) | less than |
ELT | 小于等于(<=) | equal or less than |
LIKE | 模糊查询 | |
[NOT] BETWEEN | (不在)区间查询 | |
[NOT] IN | (不在)IN查询 | |
EXP | 表达式查询,支持SQL语法 | expression |
eg:
like =>
$map['name'] = array('like','th%');
查询条件就变成了 name like 'th%' 如果配置了DB_LIKE_FIELDS参数的话,某些字段也会自动进行模糊查询,例如设置了:
'DB_LIKE_FIELDS' => 'title|name';
那么,使用 $map['title'] = 'thinkphp';查询条件就会变成 title like '%thinkphp%'支持数组方式:
$map['a'] = array('like',array('%think%','%tp'),'OR');
SQL:
a like '%think%' or a like '%tp'
BETWEEN =>
$map['id'] = array('between','1,8'); <=> $map['id'] = array('between',array('1','8'));
EXP =>
支持更复杂的查询条件
$map['id'] = array('in','1,3,8'); <=> $map['id'] = array('exp',' In(1,3,8) ');
exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。查询表达式不仅可用于查询条件,也可以用于数据更新,eg:
$User = M('User'); $data['name'] = 'ThinkPHP'; $data['score'] = array('exp','score+1'); $User->where('id=5')->save($data);
三、快捷查询
快捷查询方式是一种多字段查询的简化写法,可以进一步简化查询条件的写法,在多个字段之间用|分割表示OR查询,用&分割表示AND查询
1.不同字段相同的查询条件
$User = M('User'); $map['name|title'] = 'thinkphp'; $User->where($map)->select();
SQL:
name = 'thinkphp' OR title="thinkphp";
2.不同字段不同的查询条件
$User = M("User"); $map['status&score&title'] = array('1',array('gt','0'),'thinkphp','_multi'=>true); $User->where($map)->select();
'_multi'=>true必须加在数组的最后,表示当前是多条件匹配。
SQL:
status=1 and score>0 and title="thinkphp";
注:快捷查询方式中'|' 和'&'不能同时使用
四、统计查询
就是利用一些统计函数就行数据的查询,ThinkPHP为这些统计操作提供了一系列的内置方法,包括:
Count: 统计数量,参数是要统计的字段名(可选)
Max : 获取最大值,参数是要统计的字段名(必须)
Min : 获取最小值,参数是要统计的字段名(必须)
Avg : 获取平均值,参数是要统计的字段名(必须)
Sum : 获取总分,参数是要统计的字段名(必须)
eg:
$User = M('User'); $userCount = $User->count(); <=> $userCount = $User->count("id"); $maxScore = $User->max('score'); $minScore = $User->where('score>0')->min('score');
五、SQL查询
1.query方法
query方法用于执行SQL查询操作,如果数据非法或者查询错误则返回false,否则返回查询结果数据集(同select方法)
$Model = new Model(); $Model->query("select * from think_user where name = 'jack'");
2.execute方法
execute用于更新和写入数据的sql操作,如果数据非法或者查询错误则返回false,否则返回影响的记录数
$Model = new Model(); $Model->execute("update think_user set name='thinkPHP' where status = 1");
注:如果当前采用分布式数据库,并且设置了读写分离的话,query方法始终是在读服务器执行,因此query方法对应的都是读操作,execute方法始终是在写服务器执行,因此execute方法对应的都是写操作,而不管你的SQL语句是什么
六、动态查询
ThinkPHP实现的动态查询方法主要有以下几种:
getBy 根据字段的值查询数据 eg:getByName,getByEmail
getFieldBy 根据字段查询并返回某个字段的值 eg:getFieldByName
1.getBy动态查询
该查询方法针对数据表的字段进行查询,例如,User对象拥有id,name,address等属性,那么我们就可以使用下面的查询方法来直接根据某个属性来查询符合条件的记录
eg:
$User = M('User'); $user = $User->getByName('tom'); $user = $User->getByAddress('北京');
暂不支持多数据字段的动态查询方法,请使用find方法和select方法进行查询。
2.getFieldBy动态查询
针对某个字段查询并返回某个字段的值。
$userId = $User->getFieldByName('tom','id');
//表示根据用户的name获取用户的id值
相关推荐
在ASP技术中,数据库查询语言扮演着至关重要的角色,它允许开发者从数据库中检索、处理和展示数据。本教程将深入讲解ASP与数据库查询相关的知识。 首先,ASP的核心是VBScript或JScript脚本语言,它们用于编写服务器...
ASP 数据库查询语言定义 ASP 数据库查询语言是指用于对存放在计算机数据库中的数据进行组织、管理和检索的一种工具。SQL(Structured Query Language)是一种结构式查询语言,用于对关系数据库进行管理和检索。它是...
SQL/数据库查询语言
数据库查询语言(1).pdf
史上最全编程语言全套教程,共99门编程语言,包括: 函数式编程语言 壳编程语言 常见编程语言 ...数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 等所有常见的变成语言系列教程
史上最全编程语言全套教程,共99门编程语言,包括: 函数式编程语言 壳编程语言 常见编程语言 ...数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 等所有常见的变成语言系列教程
史上最全编程语言全套教程,共99门编程语言,包括: 函数式编程语言 壳编程语言 常见编程语言 ...数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 等所有常见的变成语言系列教程
史上最全编程语言全套教程,共99门编程语言,包括: 函数式编程语言 壳编程语言 常见编程语言 ...数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 等所有常见的变成语言系列教程
史上最全编程语言全套教程,共99门编程语言,包括: 函数式编程语言 壳编程语言 常见编程语言 ...数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 等所有常见的变成语言系列教程
史上最全编程语言全套教程,共99门编程语言,包括: 函数式编程语言 壳编程语言 常见编程语言 ...数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 等所有常见的变成语言系列教程
关于SQL关系型数据库查询语言.pptx
第8章 SQL关系数据库查询语言
史上最全编程语言全套教程,共99门编程语言,包括: 函数式编程语言 壳编程语言 常见编程语言 ...数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 等所有常见的变成语言系列教程
史上最全编程语言全套教程,共99门编程语言,包括: 函数式编程语言 壳编程语言 常见编程语言 ...数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 等所有常见的变成语言系列教程
史上最全编程语言全套教程,共99门编程语言,包括: 函数式编程语言 壳编程语言 常见编程语言 ...数据库查询语言 系统编程语言 脚本编程语言 逻辑编程语言 面向对象编程语言 等所有常见的变成语言系列教程
SQL(Structured Query Language)是一种标准的数据库查询语言,被广泛用于管理和操作关系型数据库。无论你是数据分析师、开发者还是数据库管理员,掌握SQL都是一项必备技能。本教程将带你从零开始,逐步掌握SQL的...
面向对象数据库的推理查询语言,是一篇论文,作者分析研究
数据查询语言是用于查询数据库中的数据,基本语法结构为SELECT <字段名1, 字段名2...> FROM <表名1, 表名2...> WHERE <条件>;其中,SELECT用于选择要查询的字段,FROM用于指定要查询的表,WHERE用于指定查询的条件。...