掌握Thinkphp3.2.0----SQL查询
首先,先谈一下对查询的理解:查询的对象是数据库中的数据表,一个或多个;查询的限制就是各种条件或要求;查询的结果=表对象+限制(条件)。
对数据表的操作(CRUD)查询是最复杂也是最关键的一步!'SELECT * FROM WHERE [condition]',WHERE是对基本的限制条件。
对象即数据库中数据表是不用变化的,需要变化的是查询的条件。
条件的形式
1.基本形式----字符串形式。万能形式,查询不安全(不会自动添加安全符号``),就相当于在前边的sql语句上连缀后边的条件。
$user = M('User');
//字符串的查询条件
$where_str = '`this is a string`';
//显示测试结果
$result = $user -> where($where_str) -> select();
var_dump($result);
结果:
可见就是在WHERE之后的条件中写入该字符串,也就该形式可以实现所有的WHERE关键字的SQL查询。
例如:
$user = M('User');
//字符串的查询条件
$where_str = 'id=1';
//显示测试结果
$result = $user -> where($where_str) -> select();
var_dump($result);
结果:
2.数组形式条件。还是针对WHERE查询,就是把WHERE查询的条件分开,例如id=1条件,分成 id 和 1两部分,写入数组id做键,1做值,另外写入控制符。
数组是比较推荐的形式,这里是数组形式,值是字符串或整型或浮点
例子:
$user = M('User');
//数组形式的条件
$condition['id'] = array(1);
//显示测试结果
$result = $user -> where($condition) -> select();
var_dump($result);
结果:
示例
3.对象形式的条件。和数组很像,只是更换了数据的载体为对象(stdClass空对象,PHP程序提供)
4.表达式查询。实际就是来更改条件中运算符的。根据运算符的不同可能有不同的结构,这种形式相对灵活,可以写出很复杂的SQL查询语句,不行不是还有一个自定义吗。
基本结构: 查询表达式格式:$map['字段名'] = array('表达式','查询条件');---数组形式,值是数组.查询条件可以是数组,只是对有的表达式没有作用,比如EQ
LIKE/NOTLIKE
BETWEEN/NOT BETWEEN
$user = M('User');
//表达式形式
// $map['id'] = array('BETWEEN','1,10');这两种形式一样
$map['id'] = array('BETWEEN',array(1,10)); $result = $user -> where($map) -> select();
var_dump($result);
IN/NOTIN-----IN是IN,BETWEEN是BETWEEN!
$user = M('User');
//表达式形式
$map['id'] = array('BETWEEN','1,10');
// $map['id'] = array('IN',array(1,6));这两种形式一样 $result = $user -> where($map) -> select();
var_dump($result);
自定义形式:有点像连缀
还有几种其他的形式,多写,找到合适简便就可以了
快捷方式 | &
等价效果:
$user = M('User');
//快捷方式
$map['id&user'] = 1;
// 等价于
// $map['id'] = 1;
// $map['user'] = 1;
// $map['_logic'] = 'AND';
// 或等价于
// $condition = 'id=1 AND user=1';
$result = $user -> where($map) -> select();
var_dump($result);
和表达式结合:
$user = M('User');
//快捷方式
$map['id&user'] = array(array('NEQ',1),array('EQ',1),'_multi'=>true);
$result = $user -> where($map) -> select();
var_dump($result);
结果:
SELECT * FROM `think_user` WHERE ( (`id` <> 1) AND (`user` = 1) ) [ RunTime:0.001000s ]感觉这是最好的
还有,不一定是连个字段,可以是3个或多个字段
再:
$map['_string'] = '';连缀字符串,可以连接到其他条件上
$map['query'] = '';URL模式,比较方便
$map['_complex'] = '';被覆盖的时候使用
$user = M('User');
//组合查询
/* $map['id'] = 1;
$map['_string'] = 'user=1 AND email like 3';继续连接字符串形式的条件
*/
/* $map['id'] = 1;
$map['_query'] = 'user=1&email=2';//貌似运算符只能是=
*/
/* $where['id'] = 1;
$map['id'] = 1;
$map['_complex'] = $where;
$map['_logic'] = 'OR';
*/
$result = $user -> where($map) -> select();
var_dump($result);
统计查询:$user->count();
动态查询: getById() getFieldByUser();
SQL原生
query();读
excute();写
掌握Thinkphp3.2.0----SQL查询的更多相关文章
- SolrCloud6.1.0之SQL查询测试
Solr发展飞快,现在最新的版本已经6.1.0了,下面来回顾下Solr6.x之后的一些新的特点: (1)并行SQL特性支持,编译成Streaming 表达式,可以在solrcloud集群中,并行执行 ...
- thinkphp3.2 where 条件查询
thinkphp3.2 where 条件查询 在连贯操作中条件where的操作有时候自己很晕,所以整理下,有助于使用 查询条件 支持的表达式查询,tp不区分大小写 含义 TP运算符 SQL运算符 例子 ...
- 记一个简单的sql查询
在我们做各类统计和各类报表的时候,会有各种各样的查询要求.条件 这篇主要记录一个常见的统计查询 要求如下: 统计一段时间内,每天注册人数,如果某天没有人注册则显示为0 现在建个简单的表来试试 建表语句 ...
- Oracle常用SQL查询(2)
三.查看数据库的SQL 1 .查看表空间的名称及大小 select t.tablespace_name, round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...
- MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?
如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...
- Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询
1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...
- SQL查询每个表的字段数量
--SQL查询每个表的字段数量select b.[name], count(*) As AllCount,ISNULL(ISNULL(sum(case when isnullable=0 then 1 ...
- sql查询语句如何解析成分页查询?
我们公司主要mysql存储数据,因此也封装了比较好用mysql通用方法,然后,我们做大量接口,在处理分页查询接口,没有很好分查询方法.sql查询 语句如何解析成“分页查询”和“总统计”两条语句.可能, ...
- 在Excel VBA中将SQL查询的结果赋值给变量的方法
直接上代码示例: nowdate为日期型变量 strSql = "select DISTINCT 日期 from new_ubi_data ORDER BY 日期 DESC Limit 0, ...
- 在php里写sql查询需要注意的事情
---恢复内容开始--- 今天往php里写了一条sql查询, $sql = "select * from videos where vuser=".$u: $ret = mysql ...
随机推荐
- linux下 chown命令
对Document/ 目录下的所有文件与子目录执行相同的所有者变更,修改所有者为users用户组的username用户 chown -R username:users Document/ userna ...
- HTML5和HTML4的主要区别 [转]
原文:http://www.cnblogs.com/jiangyehu1110/archive/2013/07/10/3182277.html 1. HTML5标准还在制定中 这头一个不同之处显而易见 ...
- Android studio 显示代码行号 设置
首先我们打开我们的Android Studio. 这时会弹出setting页面,我们选择show line numbers然后点击确定按钮. 此时我们就可以看到代码左侧显示出行号了 我们可 ...
- Intent之复杂数据的传递
想在两个Activity之间传递一个对象Result,在网上差了很多,都需要序列化或者时下Paracelable,等等,试了很多都不行. 后来才制单,这个Result,根本不需要集成Sereriabl ...
- NSString使用stringWithFormat拼接的相关知识
NSString使用stringWithFormat拼接的相关知识 保留2位小数点 1 2 3 4 //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSSt ...
- weiphp布署在sina sae图片显示不了问题
sae 上傳因為新浪云是有權限的限制的,所以要有權限才能上傳,以圖片為例首先在入口文件目錄(applicaiton)里的common的conf 里的config配置把上传驱动设为sea 代码 如下:' ...
- Redis到底该如何利用(二)?
上一篇文章里我简述了使用Keys作为Redis搜索的方式,确实感受到了社区的力量,写文章好处多.首先谢谢各位前辈的指导,我知道了拿Redis作为搜索是个错误的方向.本来这篇文章我觉得确实没必要发了,但 ...
- Windows 8.1安装 Vmware10
之前在windows 8上安装的Vmware 9.0,已经激活了用的蛮好,可是自从上次自动更新系统到windows 8.1后,启动虚拟机时提示要激活 使用各种激活码与注册机都无效,就算注册表信息丢失但 ...
- Linux学习笔记(5)-hello world
经过三天的熟悉,我已经将教程中那些常用命令都使用了一遍,所以,从今天起,我已经从一直Linux菜鸟蜕变成了大雕-- Linux的命令无穷多,要想背下来那肯定是不可能的,所以我的目标便是混个手熟,那些常 ...
- Angular JS 学习之路由
1.AngularJS路由允许我们通过不同的URL访问不同的内容:通过AngularJS可以实现多视图的单页WEB访问(SPA) 2.通常我们的URL形式为http://runoob.com/firs ...