【三十三】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 的性能并顺利地使用,就必须正确理解其 ...
随机推荐
- Github-karpathy/char-rnn代码详解
Github-karpathy/char-rnn代码详解 zoerywzhou@gmail.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2016-1-10 ...
- IntelliJ IDEA创建java项目
IntelliJ IDEA创建java项目 进入到IntelliJ IDEA启动界面,点击Create New Project 2.这样就进入到了创建项目页面,这里可以创建好多项目,这里我们以java ...
- 《JavaScript语言精粹》【PDF】下载
<JavaScript语言精粹>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382204 内容简介 javascript曾是&q ...
- 【java设计模式】【创建模式Creational Pattern】简单工厂模式Simple Factory Pattern(静态工厂方法模式Static Factory Method Pattern)
public class Test { public static void main(String[] args){ try{ Factory.factory("A").doSt ...
- ZooKeeper如何保证单一视图
由于ZooKeeper的数据模型简单且全部在内存中,ZooKeeper的速度非常快.它提供了一系列保证: • 顺序一致性 • 原子性 • 单一视图 • 可靠性 • 实时性 下面将结合源码(3.4.10 ...
- Cat 客户端如何构建调用链消息树
场景 & 代码 Inner0 中的某方法调用了 Inner1,代码 Inner1的代码很简单, Cat通过一个线程本地变量来保存调用链的相关信息,其中核心的数据结构是消息树和操作栈.消息树用来 ...
- php html5 文件上传 (原创)
今天自己写了一个HTML5+FileReader+php 的文件上传,ajax异步上传也支持 git 下载:git clone https://github.com/jiechengyang/HTML ...
- 1.Nginx服务应用
Nginx服务应用 Nginx的优点和作用 Nginx是一款高性能的HTTP和反向代理的服务器软件,还是一个IMAP/POP3/SMTP(邮件)代理服务器! Nginx在功能实现上都采用模块化结构设计 ...
- 微信公众号开发——通过ffmpeg解决amr文件无法播放问题
今天刚好碰到个需求,要在微信浏览器中实现录音,并在其他页面上播放.录音功能本身是JS SDK的功能,倒没啥问题,然而录音的文件保存下来是amr格式,而IOS的浏览器没法播放amr(据说微信浏览器的vi ...
- Centos6.8防火墙配置
1.基本操作 # 查看防火墙状态 service iptables status # 停止防火墙 service iptables stop # 启动防火墙 service iptables star ...