【三十三】thinkphp之SQL查询语句(全)
一:字符串条件查询
//直接实例化Model
$user=M('user1');
var_dump($user->where ('id=1 OR age=55')->select());
最终生成的sql语句为:SELECT * FROM `user1` WHERE ( id=1 OR age=55 )
PS:where 查询方法里面只要包含条件即可,多个条件加上 AND 等连接符即可
二:使用索引数组作为查询条件
$user=M('user1');
$condition['age']='55';
$condition['name']='zs';
// 索引数组查询的默认逻辑关系是 AND,如果想改变为 OR,可以使用_logic 定义查询逻辑
$condition['_logic'] = 'OR';
var_dump($user->where($condition)->select());
最终生成的sql语句为:SELECT * FROM `user1` WHERE `id` = ‘1’ AND `name` = 'zs'
三:使用对象方式查询
<?php
namespace Home\Controller;
use Think\Controller;
use Think\stdClass;
class EleController extends Controller
{
$user=M('user1');
$condition=new \stdClass;
$condition->id = '1';
var_dump($user->where($condition)->select());
}
最终生成的sql语句为:SELECT * FROM `user1` WHERE `id` = ‘1’
四:表达式查询
查询表达式格式:$map['字段名'] = array('表达式','查询条件');
$user=M('user1');
$map['age'] = array('eq', 55); //where 为 age=55
var_dump($user->where($map)->select());
五:快捷查询
//使用相同查询条件
$user = M('user1');
$map['name|email'] = 'a'; //'|'换成'&'变成AND
var_dump($user->where($map)->select());
// 不同字段不同查询条件
//使用不同查询条件
$user = M('user1');
$map['name&email'] =array('a','test@qq.com','_multi'=>true);
var_dump($user->where($map)->select());
第一条查询的结果:SELECT * FROM `user1` WHERE ( `name` = 'a' OR `email` = 'a' )
第二条查询的结果:SELECT * FROM `user1` WHERE ( (`name` = 'a') AND (`email` = 'test@qq.com') )
六:区间查询
// 区间查询
$user = M('user1');
$map['id'] = array(array('gt', 1), array('lt', 4));
var_dump($user->where($map)->select());
//第三个参数设置逻辑OR
$user = M('User1');
$map['id'] = array(array('gt', 1), array('lt', 4), 'OR');
var_dump($user->where($map)->select()
}
七:组合查询
组合查询是基于索引数组查询方式的一个扩展性查询,添加了字符串查询(_string)、复合查询(_complex)、请求字符串查询(_query),由于采用的是索引数组,重复的会被覆盖。
//字符串查询(_string)
$user = M('user1');
$map['name'] = array('eq', 'zs');
$map['_string'] ='age="30" AND email="zs@qq.com"';
var_dump($user->where($map)->select());
//请求字符串查询(_query)
$user = M('user1');
$map['id'] = array('eq', "1");
$map['_query'] ='name=zs&email=zs@qq.com&_logic=OR';
var_dump($user->where($map)->select());
//复合查询(_complex)
$user = M('user1');
$where['name'] = array('like', 'z');
$where['id'] = 1;
$where['_logic'] = 'OR';
$map['_complex'] = $where;
$map['id'] = 3;
$map['_logic'] = 'OR';
var_dump($user->where($map)->select());
第一条查询语句:SELECT * FROM `user1` WHERE `name` = 'zs' AND ( age="30" AND email="zs@qq.com" )
第二条查询语句:SELECT * FROM `user1` WHERE `name` = 'zs' AND ( age="30" AND email="zs@qq.com" ) AND ( `name` = 'zs' OR `email` = 'zs@qq.com' )
第三条查询语句:SELECT * FROM `user1` WHERE `name` = 'zs' OR ( age="30" AND email="zs@qq.com" ) OR ( `name` = 'zs' OR `email` = 'zs@qq.com' ) OR ( `name` LIKE 'z' OR `id` = 1 )
八:统计查询
//数据总条数
//SHOW COLUMNS FROM `user1`
$user = M('user1');
var_dump($user->count());
//字段总条数,遇到NULL不统计
//SELECT COUNT(*) AS tp_count FROM `user1` LIMIT 1
$user = M('user1');
var_dump($user->count('email'));
//最大值
//SELECT MAX(id) AS tp_max FROM `user1` LIMIT 1
$user = M('user1');
var_dump($user->max('id'));
//最小值
//SELECT MIN(id) AS tp_min FROM `user1` LIMIT 1
$user = M('user1');
var_dump($user->min('id'));
//平均值
//SELECT AVG(id) AS tp_avg FROM `user1` LIMIT 1
$user = M('user1');
var_dump($user->avg('id'));
//求总和
//SELECT SUM(id) AS tp_sum FROM `user1` LIMIT 1
$user = M('user1');
var_dump($user->sum('id'));
九:动态查询
// 1.getBy 动态查询
//查找email=xiaoin@163.com的数据
//SELECT * FROM `user1` LIMIT 1
$user = M('user1');
var_dump($user->getByemail('zs@qq.com'));
// 2.getFieldBy 动态查询
//通过user得到相对应id值
//SELECT `id` FROM `user1` LIMIT 1
$user = M('user1');
var_dump($user->getFieldByUser('ls', 'id'));
十:SQL查询
// 1.query 读取
//查询结果集,如果采用分布式读写分离,则始终在读服务器执行
//SELECT * FROM user1
$user = M('user1');
var_dump($user->query('SELECT * FROM user1'));
// 2.execute写入
//更新和写入,如果采用分布式读写分离,则始终在写服务器执行
//UPDATE user1 set name="xuexi" WHERE id="1";
$user = M('user1');
var_dump($user->execute('UPDATE user1 set name="xuexi" WHERE
id="1";'));
十一:连贯查询
通过连贯操作可以有效的提供数据存取的代码清晰度和开发效率,并且支持所有的 CURD 操作
//连贯操作
//PS:这里的 where、order 和 limit 方法都是连贯操作方法,所以它们都能返回$user本身,可以互换位置。而 select 方法不是连贯方法,需要放在最后,用以显示数据集。
//SELECT * FROM `user1` WHERE ( id in (1,2,3,4) ) LIMIT 2
$user=M('user1');
var_dump($user->where('id in (1,2,3,4)')->limit(2)->select());
//数组操作
//SELECT * FROM `user1` WHERE id in (1,2,3,4) LIMIT 2
$user = M('user1');
var_dump($user->select(array('where'=>'id in (1,2,3,4)', 'limit'=>'2',
)));
// CURD处理
// SELECT * FROM `user1` WHERE ( id=1 ) LIMIT 1
// DELETE FROM `user1` WHERE ( id=2 )
$user = M('user1');
var_dump($user->where('id=1')->find());
var_dump($user->where('id=2')->delete());
1.where(支持字符串条件、数组条件(推荐用法)和多次调用。)
//字符串方式
//SELECT * FROM `user1` WHERE ( id=6 )
var_dump($user->where('id=6')->select()); //索引数组方式
// SELECT * FROM `user1` WHERE `id` = 6
$map['id']=6;
var_dump($user->where($map)->select()); //多次调用方式
SELECT * FROM `user1` WHERE `id` = 6 AND ( name="test" )
$map['id']=array('eq',6);
var_dump($user->where($map)->where('name="test"')->select());
2.order 用于对结果集排序
// 倒序
// SELECT * FROM `user1` ORDER BY id desc
var_dump($user->order('id desc')->select()); // 第二排序
// SELECT * FROM `user1` ORDER BY id desc,age desc
var_dump($user->order('id desc,age desc')->select()); //数组形式,防止字段和mysql关键字冲突
// SELECT * FROM `user1` ORDER BY `id` DESC,`email` DESC
$map['id']=1;
var_dump($user->order(array('id'=>'DESC','email'=>'DESC'))->select());
3.feild(feild 方法可以返回或操作字段,可以用于查询和写入操作。)
// 只显示id和name两个字段
// SELECT `id`,`name` FROM `user1`
var_dump($user->field('id,name')->select()); //使用SQL函数和别名
// SELECT SUM(id) as count,`name` FROM `user1`
var_dump($user->field('SUM(id) as count,name')->select()); // 使用数组参数结合SQL函数
// SELECT `id`,LEFT(name,1) AS `left_user` FROM `user1`
var_dump($user->field(array('id','LEFT(name,1)'=>'left_user'))->select()); //获取所有字段
// SELECT * FROM `user1`
var_dump($user->field()->select()); //用于写入
$user->field('name,email')->create();
4.limit(主要用于指定查询和操作的数量)
//限制结果集数量
// SELECT * FROM `user1` LIMIT 2
var_dump($user->limit(2)->select()); //分页查询
// SELECT * FROM `user1` LIMIT 1,2
var_dump($user->limit(1,2)->select());
5.page(page 方法完全用于分页查询)
//page分页
// SELECT * FROM `user1` LIMIT 3,3
var_dump($user->page(2,3)->select());
6.table(用于数据表操作,主要是切换数据表或多表操作)
//切换数据表
// SELECT * FROM `test_user`
var_dump($user->table('test_user')->select());
7.alias (用于设置数据表别名)
// 设置别名
// SELECT * FROM user1 a
var_dump($user->alias('a')->select());
8.group(用于对结合函数统计的结果集分组)
// 分组统计
// SELECT `name`,max(id) FROM `user1` GROUP BY id
var_dump($user->field('name,max(id)')->group('id')->select());
9.having(用于配合 group 方法完成从分组的结果中再筛选数据)
//分组统计结合having
// SELECT `user`,max(id) FROM `user1` GROUP BY id HAVING id>2
var_dump($user->field('user,max(id)')->group('id')->having('id>2')->select());
10.comment (用于对 SQL 语句进行注释)
//SQL注释
// SELECT * FROM `user1` /* test */
var_dump($user->comment('test')->select());
命名空间
命名范围其实就是将 SQL 语句封装在模型定义类里,而不在控制器里。
在Model下新建一个User1Model.class.php文件
<?php
namespace Home\Model;
use Think\Model;
class User1Model extends Model
{
//定义属性
protected $_scope = array( //属性名必须是_scope
'sql1'=>array(
'where'=>array('id'=>1),
),
'sql2'=>array(
'order'=>'date DESC',
'limit'=>2,
),
'default'=>array(
'where'=>array('id'=>2),
),
);
}
命名范围支持的属性有:where、field、order、table、limit、page、having、group、lock、distinct、cache
在Controller目录下新建一个User1Controller.class.php文件
<?php
namespace Home\Controller;
use Think\Controller;
use Home\Model\User1Model;
class User1Controller extends Controller {
public function model(){
// ps:一定要填入表名,user1
// 他会先去model文件夹找有没有user1model
// 如果有就应用
// 如果没有,会直接引用model基类
$user=D('user1');
// sql语句:SELECT * FROM `user1` WHERE `id` = 1
var_dump($user->scope('sql1')->select());
}
}
【三十三】thinkphp之SQL查询语句(全)的更多相关文章
- ThinkPHP(3)SQL查询语句
ThinkPHP中对查询语句,包含了基本的查询方式.表达方式.快速查询.区间查询.组合查询.SQL查询.动态查询和子查询. 一.查询方式 ThinkPHP提供了三种基本的查询方式:字符串条件查询.索引 ...
- (转)经典SQL查询语句大全
(转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...
- 经典SQL查询语句大全
一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...
- SQL查询语句分类
SQL查询语句有多种,下面总结下.首先先建三张表用于后面的实验 -- 学生表,记录学生信息 CREATE TABLE student( sno ), sname ), ssex ENUM('男','女 ...
- sql查询语句优化
http://www.cnblogs.com/dubing/archive/2011/12/09/2278090.html 最近公司来一个非常虎的dba 10几年的经验 这里就称之为蔡老师吧 在征得 ...
- SQL查询语句大全及其理解
转自:https://www.cnblogs.com/1234abcd/p/5530314.html 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删 ...
- SQL查询语句 [2]
一.快捷查询 快捷查询方式是一种多字段查询的简化写法,在多个字段之间用'|'隔开表示OR,用'&'隔开表示 AND. 1.不同字段相同查询条件 在 Home/controller/UserC ...
- SQL查询语句大全集锦
SQL查询语句大全集锦 一. 简单查询 简单的Transact-SQL查询只包括选择列表.FROM子句和WHERE子句.它们分别说明所查询列.查询的 表或视图.以及搜索条件等. 例如,下面的语句查询t ...
- 一文读懂一条 SQL 查询语句是如何执行的
2001 年 MySQL 发布 3.23 版本,自此便开始获得广泛应用,随着不断地升级迭代,至今 MySQL 已经走过了 20 个年头. 为了充分发挥 MySQL 的性能并顺利地使用,就必须正确理解其 ...
随机推荐
- 聚集索引VS非聚集索引
聚集索引VS非聚集索引 SQL Server 2014 发布日期: 2016年12月 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度. 索引包含由表或视图中的一列或多列生成的键. ...
- .Net Ajax跨域请求实现
下一阵子要做一个网站Web储备一下知识,AJAX 实现跨域请求,估计会用到,以前在学 WebServer 时候老师整理的一个文档,现在便于查阅和使用现在放到我的博客中. 一般平时我写web页面的时 ...
- 【TEGer 在全球架构师峰会】 : 腾讯海外计费系统架构演进
欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~ 作者简介:abllen,2008年加入腾讯,一直专注于腾讯计费平台建设,主导参与了腾讯充值中心.计费开放平台.统一计费米大师等项目,见证了米大师 ...
- Nginx各种配置
日志 日志中属性 $remote_addr,$http_x_forwarded_for 记录客户端IP地址 $remote_user 记录客户端用户名称 $request 记录请求的URL和HTTP协 ...
- iOS APP内购
看到网上文章一大把,看了这个觉得挺不错的,谢谢 iOS大全 公众平台; 原文:http://mp.weixin.qq.com/s?__biz=MzAxMzE2Mjc2Ng==&mid=2652 ...
- bzoj 2302: [HAOI2011]Problem c
Description 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了, ...
- 关于文件上传的ajax交互
首先我们来了解一下上传文件 <input type="file"> input的file常用上传类型 后缀名 MIME名称 *.3gpp audio/3gpp, vid ...
- MySQL连接方式及大小写问题
一.连接数据库 在命令行连接MySQL有这两种方式,一种是使用命令行参数:另一种是将参数信息写入配置文件 1.命令行中使用参数 -u用户名 -p密码 -D数据库名 -P数据库服务端口 -s安静模式 ...
- 一起学Linux02之Linux系统启动过程
这个Linux系统启动过程啊,说实话,我认为,刚学习的时候看几遍,了解一下就好.现在的主要任务是用.熟练了之后再来深究这个不急. 下面我就简单地说说吧. Linux系统的启动主要分为下列步骤: 1 内 ...
- class, classloder, dex 详解
class与dex文件 什么是class文件 class文件是一种能够被JVM识别,加载并且执行的文件格式. class文件的作用 class文件的作用是记录一个类文件的所有信息. 例如记住了当前类的 ...