一:字符串条件查询

        //直接实例化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查询语句(全)的更多相关文章

  1. ThinkPHP(3)SQL查询语句

    ThinkPHP中对查询语句,包含了基本的查询方式.表达方式.快速查询.区间查询.组合查询.SQL查询.动态查询和子查询. 一.查询方式 ThinkPHP提供了三种基本的查询方式:字符串条件查询.索引 ...

  2. (转)经典SQL查询语句大全

    (转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...

  3. 经典SQL查询语句大全

    一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...

  4. SQL查询语句分类

    SQL查询语句有多种,下面总结下.首先先建三张表用于后面的实验 -- 学生表,记录学生信息 CREATE TABLE student( sno ), sname ), ssex ENUM('男','女 ...

  5. sql查询语句优化

    http://www.cnblogs.com/dubing/archive/2011/12/09/2278090.html 最近公司来一个非常虎的dba  10几年的经验 这里就称之为蔡老师吧 在征得 ...

  6. SQL查询语句大全及其理解

    转自:https://www.cnblogs.com/1234abcd/p/5530314.html 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删 ...

  7. SQL查询语句 [2]

    一.快捷查询 快捷查询方式是一种多字段查询的简化写法,在多个字段之间用'|'隔开表示OR,用'&'隔开表示 AND. 1.不同字段相同查询条件 在  Home/controller/UserC ...

  8. SQL查询语句大全集锦

    SQL查询语句大全集锦 一. 简单查询 简单的Transact-SQL查询只包括选择列表.FROM子句和WHERE子句.它们分别说明所查询列.查询的 表或视图.以及搜索条件等. 例如,下面的语句查询t ...

  9. 一文读懂一条 SQL 查询语句是如何执行的

    2001 年 MySQL 发布 3.23 版本,自此便开始获得广泛应用,随着不断地升级迭代,至今 MySQL 已经走过了 20 个年头. 为了充分发挥 MySQL 的性能并顺利地使用,就必须正确理解其 ...

随机推荐

  1. MySQL存储过程之游标实战

    MySQL存储过程之游标实战 ​ 博主日前在解决一个项目需求时,没有什么好的方法,于是就来学习存储过程了,之前也是接触过,奈何年少贪玩,竟是全部又还给了大学老师-苦不堪言呐-. ​ 先说一下业务需求吧 ...

  2. springCloud项目练习

    1.https://gitee.com/xfdm/FCat angular4.springcloud开源实战项目:FCat项目(springcloud.mybatis.redis.angular4)是 ...

  3. 《软件测试的艺术(原书第2版)》【PDF】下载

    <软件测试的艺术(原书第2版)>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196343 内容简介 本书以一次自评价测试开篇,从软 ...

  4. H5+混合移动app应用开发——开篇

    前言 经过2个多月的艰苦奋斗,app的第一个版本已经快完工了,期间遇到了太多的坑,作为一个喜欢分享的人,我当然不会吝啬分享这爬坑历程.不要问我有多坑,我会告诉你很多,很多..... 过去一直从事.ne ...

  5. xamarin android menu的用法

    在Android中的菜单有如下几种: OptionMenu:选项菜单,android中最常见的菜单,通过Menu键来调用 SubMenu:子菜单,android中点击子菜单将弹出一个显示子菜单项的悬浮 ...

  6. bzoj 3597: [Scoi2014]方伯伯运椰子

    Description Input 第一行包含二个整数N,M 接下来M行代表M条边,表示这个交通网络 每行六个整数,表示Ui,Vi,Ai,Bi,Ci,Di 接下来一行包含一条边,表示连接起点的边 Ou ...

  7. Java 向下转型

    1.Java 中父类直接向子类转型的不合法的,可以编译但运行时报错. Java中子类直接向父类转型 是合法的,但转型后,可以执行的方法仅限存在于父类中的,在执行时,先看子类的是否有定义,有就执行,没有 ...

  8. redis centos启动

    转到redis目录 ./redis-server /usr/java/redis/redis.conf

  9. IE下判断IE版本的语句...[if lte IE 8]……[endif]

    <!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见   <!--[if lte IE 7]> <![endif]--> ...

  10. js写基础insertAfter()方法

    //DOM没有提供insertAfter()方法 function insertAfter(newElement, targetElement){ var parent = targetElement ...