SQL查询语句 [2]
一、快捷查询
快捷查询方式是一种多字段查询的简化写法,在多个字段之间用'|'隔开表示OR,用'&'
隔开表示 AND。
1.不同字段相同查询条件
在 Home/controller/UserController.class.php 中插入
//使用相同查询条件
$user = M('User');
$map['user|email'] = '蜡笔小新'; //'|'换成'&'变成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 还要对应'蜡笔小新'的情况。而且,这设置要在放在数组最后。
如果不加 '_multi'=> true 这行语句,则在调试中为:

//支持使用表达式结合快捷查询
$user = M('User');
$map['id&user'] = array( array('gt', 0),'蜡笔小新','_multi'=> true);
var_dump($user->where($map)->select());
其中 array('gt', 0) 在上一篇已经讲过了,是指大于0的数据,即id大于0的数据都符合条件
二、区间查询
ThinkPHP 支持对某个字段的区间查询。
//区间查询
$user = M('User');
$map['id'] = array( array('gt', 1), array('lt', 4));
var_dump($user->where($map)->select());
即为符合id大于1且小于4的数据
//第三个参数设置逻辑OR
$user = M('User');
$map['id'] = array( array('gt', 1), array('lt', 4), 'OR');
var_dump($user->where($map)->select());
这是符合id大于1或者id小于4的数据。
三、组合查询
组合查询是基于索引数组查询方式的一个扩展性查询,添加了字符串查询(_string)、复
合查询(_complex)、请求字符串查询(_query),由于采用的是索引数组,重复的会被覆盖。
1、字符串查询(_string)
//字符串查询(_string)
$user = M('User');
$map['id'] = array('eq', 1);
$map['_string'] ='user="蜡笔小新" AND email="xiaoxin@163.com"';
var_dump($user->where($map)->select());
这时浏览器中调试的SQL查询方式为:

看到查询语句中的user和email都没有类似单引号``(键盘上1的左边的那个符号),这样的查询方式不大安全;
2、请求字符串查询(_query)
//请求字符串查询(_query)
$user = M('User');
$map['id'] = array('eq', 1);
$map['_query'] ='user=蜡笔小新&email=xiaoxin@163.com&_logic=OR';
var_dump($user->where($map)->select());
这样的方式比较好用,也可以叫URL查询方式,只用&符号就可以,也不用添加单引号,且SQL的查询方式为:

可以看到这时候查询的语句中user和email都加上了``,这样的查询方式也比较安全。
另外说明一点的就是
$user = M('User');
$map['id']=array('eq',1);
$map['id']=2;
var_dump($user->where($map)->select());
这时,SQL查询的就只有id=2的数据了, $map['id']=2; 会将 $map['id']=array('eq',1); 覆盖掉
3、复合查询(_complex)
$user = M('User');
$map['id']=array('eq',1);
$where['id']=2;
$map['_complex']=$where;
var_dump($user->where($map)->select());
这里新添加了一个数组$where,第2中方法中也说了 $map['id']=2; 会将 $map['id']=array('eq',1); 覆盖掉
使用复合查询后,对应的SQL查询语句为:

这时默认的连接符是AND,如果想换成或,则添加一条语句 $map['_logic']='OR'; 即可
四、统计查询
查询有多少条目
$user = M('User');
var_dump($user->count());
这时SQL查询语句为:

然后查询数据库中某一个名字下有多少条数据
首先我们的数据库是这样的

然后我们单独查询email下有多少条:
$user = M('User');
var_dump($user->count('email'));
查询后显示的结果为 string(1) "4" 这时我们手动添加一条数据
首先我们把email设置为可以为空,如下图所示

然后添加一条数据,这时email栏不添加任何数据,添加后如下图所示

这时,再查询email的有多少条时,显示的为 string(1) "4" ,我们给user为'李艳辉'的email添加为'yanhui@163.com',再查询,则显示为 string(1) "5"
也就是字段总条数,遇到NULL不统计。
下面是查询数据库的一些其他的信息
var_dump($user->max('id')); 查询id的最大值
var_dump($user->min('id')); 查询id的最小值
var_dump($user->avg('id')); 查询id的平均值
var_dump($user->sum('id')); 查询id的总值
五、动态查询
借助 PHP5 语言的特性,ThinkPHP 实现了动态查询。
1.getBy 动态查询
$user = M('User');
var_dump($user->getByEmail('xiaoxin@163.com'));
直接查询email为xiaoxin@163.com的数据
也可以使用 var_dump($user->getByUser('蜡笔小新')); 来获得该条目的数据
也就是getBy后面接的必须是建立的数据表中的名字

2、getFieldBy 动态查询
//通过user得到相对应id值
$user = M('User');
var_dump($user->getFieldByUser('路飞', 'id'));
这时,将id改为email,也可得到eamil的值,但是getFieldByUser中第一个参数必须是user对应的名字。
同样的 getFieldByUser 也可以换成 getFieldByid 等,然后括号内第一个参数为id对应的值,后面一个参数是查询的建立的数据表中的名字。
六、SQL查询
ThinkPHP支持原生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'));
SQL查询语句 [2]的更多相关文章
- sql查询语句如何解析成分页查询?
我们公司主要mysql存储数据,因此也封装了比较好用mysql通用方法,然后,我们做大量接口,在处理分页查询接口,没有很好分查询方法.sql查询 语句如何解析成“分页查询”和“总统计”两条语句.可能, ...
- 15个初学者必看的基础SQL查询语句
本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...
- SQL查询语句去除重复行
1.存在两条完全相同的纪录 这是最简单的一种情况,用关键字distinct就可以去掉 select distinct * from table(表名) where (条件) 2.存在部分字段相同的纪录 ...
- WordPress 常用数据库SQL查询语句大全
在使用WordPress的过程中,我们少不了要对数据库进行修改操作,比如,更换域名.修改附件目录.批量修改文章内容等等.这个时候,使用SQL查询语句可以大大简化我们的工作量. 关于如何操作SQL查询语 ...
- (转)经典SQL查询语句大全
(转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...
- 转: 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- 经典SQL查询语句大全
一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...
- oracle中sql查询语句的执行顺序
查询语句的处理过程主要包含3个阶段:编译.执行.提取数据(sql查询语句的处理主要是由用户进程和服务器进程完成的,其他进程辅助配合) 一.编译parse 在进行编译时服务器进程会将sql语句的正文放入 ...
- SQL查询语句分类
SQL查询语句有多种,下面总结下.首先先建三张表用于后面的实验 -- 学生表,记录学生信息 CREATE TABLE student( sno ), sname ), ssex ENUM('男','女 ...
- 浅谈SQL优化入门:1、SQL查询语句的执行顺序
1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_ ...
随机推荐
- mac下编译安装grafana 4.2.0
go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发. 下面介绍在Mac OS X中golang的开发环境配置. 1.安装brew brew是一个mac下的由ruby开发 ...
- React native 开发工具 VSCode
1.VSCODE下载地址:先下载VSCode软件 2.代码提示功能: 打开 VSCode ,然后 按住键盘 command+p,然后在vscode上面输入框 输入: "ext install ...
- 制作导航菜单分隔线的总结:用css3
经过百度统计中国中使用谷歌浏览器比较多,我很奇怪,我身边的同事很少用谷歌,唯一我用谷歌的原因就是看上它调试能力和模拟手机. 下面是我个人制作的 预览用谷歌浏览器. <!doctype html& ...
- android 关于Toast重复显示解决方法
解决思路: 不用计算Toast的时间之类的,就是定义一个全局的成员变量Toast, 这个Toast不为null的时候才去make,否则直接setText.为了按返回键后立即使Toast不再显示,重 ...
- LeetCode OJ:Unique Paths(唯一路径)
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- HttpClient与Spring RestTemplate
需要的包 ,除了Spring的基础包外还用到json的包,这里的数据传输使用json格式 客户端和服务端都用到一下的包 <!-- Spring --> <dependency> ...
- 剑指offer--10.最小的K个数
边界判断,坑了一下 ----------------------------------------------- 时间限制:1秒 空间限制:32768K 热度指数:375643 本题知识点: 数组 ...
- 2017.12.15 python资料,转存一下。
最近GD项目三个型号都是用Python做批量烧录和测试的.marking一下,,虽然自己不会写. 1.入门阶段 The Python Tutorial(https://docs.python.org/ ...
- 机器学习(六)— logistic回归
最近一直在看机器学习相关的算法,今天学习logistic回归,在对算法进行了简单分析编程实现之后,通过实例进行验证. 一 logistic概述 个人理解的回归就是发现变量之间的关系,也就是求回归系数, ...
- 微信小程序 写音乐播放器 slider组件 将value设置为0 真机测试滑块不能回到起点
最近在用微信小程序写一个音频播放页面,做时间进度的时候用到了slider插件,但是在自然播放完成,或者上/下切换的时候,将slider的value属性值设为0,开发工具上滑块会回到起点,有效.但是真机 ...