1、alias 用于设置数据表别名

$user = M('User');
var_dump($user->alias('anothername')->select());

这时在SQL中的查询语句为

需要注意的是如果将anothername 中的another 和name中加空格,这样是有问题的。就无法连接数据库了。

2、group 方法通常用于对结合函数统计的结果集分组。

$user = M('User');
var_dump($user->field('user,max(id)')->group('id')->select());

这时是按group里的id来分组,相同的id的则会在一起,如果是group('email'),则会根据email相同的分在一组,这时可能不是email所有的都会相同

但是按email第一个匹配的分在一块。这里的 field('user,max(id)') 是只取数据库里的user和id,其他的不显示

SQL语句为 SELECT `user`,max(id) FROM `think_user` GROUP BY id

3、having 方法一般用于配合 group 方法完成从分组的结果中再筛选数据。

$user = M('User');
var_dump($user->field('user,max(id)')->group('id')->having('id>2')->select());

从group分好组后,就开始筛选组里大于2的显示出来

SQL语句为 SELECT `user`,max(id) FROM `think_user` GROUP BY id HAVING id>2

4、distinct方法用于返回唯一不同的值

$user = M('User');
var_dump($user->distinct( true)->field('user')->select());

这时如果是相同的值就不会再显示出来

5、cache 用于查询缓存操作

$user = M('User');
var_dump($user->cache(true)->select());

PS:第一次查询数据库,第二次查询相同的内容直接调用缓存,不用再查询数据库。

三、命名范围

命名范围其实就是将 SQL 语句封装在模型定义类里,而不在控制器里。这样的分层操
作有利于代码的可读性,避免开发人员在写 CURD 操作时出现问题。架构人员只要在命名范
围内合理的规划即可,类似于架构师架构了接口,让开发人员面向接口开发一样。

要使用命名范围,第一步要定义属性:

在 Home/Model/UserModel.class.php 里插入以下代码:

<?php
namespace Home\Model;
use Think\Model; class UserModel extends Model {
protected $_scope = array( //$_scope是固定的,不可更改
'sql1' => array(
'where'=>array('id'=>1),
),
'sql2' =>array(
'order'=>array('date'=>'DESC'),
'limit'=> 2,
),
'default'=>array(
'where'=>array('id'=>2)
),
); }

然后在 Home/controller/UserController.class.php 中调用,需要注意的是,调用的时候scope也是不能改变的。

1.

$user = D('User');
var_dump($user->scope('sql1')->select());

这时得到的SQL查询语句为: SELECT * FROM `think_user` WHERE ( `id` = 1 )

2.

var_dump($user->scope('sql2')->select());

得到的SQL查询语句为: SELECT * FROM `think_user` ORDER BY `date` DESC LIMIT 2

3、

var_dump($user->scope('sql2')->scope('sql1')->select());

得到的SQL语句为:

SELECT * FROM `think_user` WHERE ( `id` = 1 ) ORDER BY `date` DESC LIMIT 2

4.

var_dump($user->scope()->select());

得到的SQL语句为: SELECT * FROM `think_user` WHERE ( `id` = 2 )

这时调用的default数组,也就是在调用scope()里面不需要填入参数

5.

var_dump($user->scope('sql2',array('limit'=>4))->select());

在调用时改变原来sql2的数组的条件,也可以改变全部的

6.

var_dump($user->scope(array('where'=>array('id'=>1),'order'=>'date desc','limit'=>4))->select());

这时是直接写入参数,不调用类里面的参数

7.

var_dump($user->sql1()->select());

这里是把写在类里的数组直接当作方法来调用,效果和调用sql1是一样的。

SQL 连贯操作 [2]的更多相关文章

  1. SQL 连贯操作 [1]

    一. 连贯入门 查找到 id 为 1,2,3,4 中按照创建时间的倒序的前两位. 在 Home/controller/UserController.class.php 下插入 1.连贯操作入门 $us ...

  2. 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句

    如题: 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句不是一条关联查询语句. 例如: $list = $db->relation(true) ...

  3. ci连贯操作的limit两个参数和sql是相反的

    ci连贯操作的limit两个参数和sql是相反的 db->where("name =",'mary')->ge() name后面要有个空格否则报错当为一个字段 -> ...

  4. ThinkPhp 3.2 数据的连贯操作

    ThinkPHP模型基础类提供的连贯操作方法(也有些框架称之为链式操作),可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作. 使用也比较简单, 假如我们现在要查询一个User表 ...

  5. thinkPHP--SQL连贯操作

    一.连贯入门 连贯操作使用起来非常简单,比如查找到 id 为 1,2,3,4 中按照创建时间的倒序的前两 位. //连贯操作入门 $user = M('User'); var_dump($user-& ...

  6. 【转】PHP实现连贯操作

    [第一种方案 __call] 我们在使用一些框架(如ThinkPHP)编码的时候,常用到这样的代码. M('User')->where(array('id'=>1))->field( ...

  7. Laravel框架数据库CURD操作、连贯操作

    这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 $users = DB::t ...

  8. Laravel框架数据库CURD操作、连贯操作总结

    这篇文章主要介绍了Laravel框架数据库CURD操作.连贯操作.链式操作总结,本文包含大量数据库操作常用方法,需要的朋友可以参考下 一.Selects 检索表中的所有行 复制代码代码如下: $use ...

  9. ThinkPHP第十八天(Widget类的使用,连贯操作where IN用法,缓存S函数使用)

    1.Widget类的使用方法: 第一步:在Action同级目录中新建Widget文件夹(独立分组需要自己建立) 第二步:根据不同功能在Widget文件夹中建立不同的Widget类,如热门文章HotWi ...

随机推荐

  1. Windows 运行中的命令

    辅助功能选项 access.cpl 添加硬件向导 hdwwiz.cpl 添加或删除程序 appwiz.cpl 管理工具 control admintools 自动更新 wuaucpl.cpl Blue ...

  2. 修复 Xcode 错误 “The identity used to sign the executable is no longer valid”

    如图: 解决方法来自:http://stackoverflow.com/questions/7088441/the-identity-used-to-sign-the-executable-is-no ...

  3. iOS 检查指定日期是否在当前日期之前

    iOS检查指定日期是否在当前日期之前, 直接上代码: - (BOOL)checkProductDate: (NSString *)tempDate { NSDateFormatter *dateFor ...

  4. 掌握sudo的使用

    “sudo”是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他 特许用户才能完成的任务,比如:运行一些像mount,h ...

  5. IEflash遇到flash遮挡

    遇到IE中(包括IE6+)弹窗广告要flash遮挡的问题,后来想到了常用的iframe方法(参见<解决IE6 select z-index无效,遮挡div的bug>),最终成功了flash ...

  6. 2017.10.3北京清北综合强化班DAY3

    括号序列(bracket) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一个括号序列,但这个序列不一定合法. 一个合法的括号序列如下: ()是合法的 ...

  7. 一、Jmeter的安装

    一.首先安装Jmeter 1.安装java Jmeter是使用java实现的测试工具,在安装Java之前我们需要安装java. 到这里去下载相应的JDK:https://www.java.com/en ...

  8. Java编程思想第七章复用类

    7.1组合语法 在一个类中引入多个对象,以提高代码的复用性与功能. 7.2继承语法 使用继承子类可以获得,导出类可以获得基类的成员(变量与方法). 注:这里注意权限控制,若基类中的成员为默认权限,只有 ...

  9. flask之flask_socketio

    js客户端发送 {'op':'descrip', 100} python服务端收到的为 dict, 回复客户端可以用emit(str(json.dumps(dict)), room=roomname) ...

  10. Azure上通过haproxy实现APP Gateway或WAF的http跳转https

    Azure上的APP Gateway是七层负载均衡服务,WAF是APP Gateway服务的扩展.在实现七层负载均衡的同时,增加了WAF的功能,可以对后台的HTTP服务进行保护. Azure WAF采 ...