zoukankan      html  css  js  c++  java
  • #ThinkPHP_3.2.2模型# where查询条件汇总

    特别喜欢 ThinkPHP_3.2.3 框架的Model,结合官方手册及查看源代码,汇总出其大体用法:

    核心转换方法:

    $this->parseWhere($where);
    $whereStr .= $this->parseThinkWhere($key, $val);
    $this->parseWhereItem($this->parseKey($key), $val);

    // 内连接、左连接、右连接 UserModel.class.php
    // SQL:( SELECT * FROM sg_user u LEFTJOIN sg_user_field uf on u.userId=uf.userId WHERE ( u.userId = 1 ) )
    $list = $this->alias('u')->join('__USER_FIELD__ uf on u.userId=uf.userId', 'LEFT')->where($where)->buildSql();
    $list = $this->table('__USER__u')->join('__USER_FIELD__ uf on u.userId=uf.userId', 'LEFT')->where($where)->buildSql();

    单词缩写:

    e(=):equal  ;   n:not  ;  gt(>):greater than  ;  lt(<):lower than

    where查询条件汇总:

    <?php
    $where = array(
        '_logic' => 'and', 'or', 'xor',
        array( // 注:跟 '_complex' 功能一样
            'name' => '名称',
            'title' => '标题'
        ),
        '_complex' => array(
            'name' => '名称',
            'title' => '标题'
        ),
        '_string' => "name='52php.cnblogs.com' AND title='cnblogs'",
        '_query' => "_logic=AND&name=52php.cnblogs.com&title=cnblogs",
    
        //-------------------------------------------------
    
        'name|title|nickname' => '名称',
        'name|title|nickname' => array(
            '_multi' => 1,
            '名称',
            '标题',
            '昵称'
        ),
        'name&title&nickname' => '名称',
        'name&title&nickname' => array(
            '_multi' => 1,
            '名称',
            '标题',
            '昵称'
        ),
    
        //-------------------------------------------------
    
        'name' => '52php.cnblogs.com',
    
        // 表达式查询
        'name' => array('like', '52php.cnblogs.com%'),
        'name' => array('like', array('%52php.cnblogs.com%', '%sg'), 'or'),
    
        'name' => array('notlike', '52php.cnblogs.com%'),
        'name' => array('notlike', array('%52php.cnblogs.com%', '%sg'), 'or'),
    
        'id' => array('eq|neq|gt|egt|lt|elt', 28),
    
        'id' => array('exp', 'IN (2,3,4)'),
    
        'id' => array('in|not in', '(2,3,4)', 'exp'),
        'id' => array('in|not in', '2,3,4'),
        'id' => array('in|not in', array(2,3,4)),
    
        'id' => array('between', '1,8'),
        'id' => array('between', array(1,8)),
    
        // 区间查询
        'id' => array(array('neq', 6), array('gt', 3), 'and'),
        'id' => array(array('neq', 6), array('gt', 3), array('and')),
        'id' => array(array('exp', 'in(2,3,4)'), array('gt', 3), 'and'),
        'id' => array(array('in', array(2,3,4)), array('eq', ''), 'or')
    );

      


      

    Where 条件中使用表达式

    这里说的表达式,是指 ThinkPHP 框架中特有的表达式。这些表达式用于查询或更新删除等操作的 where条件 及模板标签中。

    Where 条件表达式格式为:

    $where['字段名']  = array('表达式', '操作条件');

    其中 $map 是一个普通的数组变量,可以根据自己需求而命名。上述格式中的表达式实际是运算符的意义:

    ThinkPHP运算符 与 SQL运算符 对照表

    TP运算符SQL运算符例子实际查询条件
    eq = $where['id'] = array('eq',100); 等效于:$where['id'] = 100;
    neq != $where['id'] = array('neq',100); id != 100
    gt > $where['id'] = array('gt',100); id > 100
    egt >= $where['id'] = array('egt',100); id >= 100
    lt < $where['id'] = array('lt',100); id < 100
    elt <= $where['id'] = array('elt',100); id <= 100
    like like $where['username'] = array('like','Admin%'); username like 'Admin%'
    between between and $where['id'] = array('between','1,8'); id BETWEEN 1 AND 8
    not between not between and $where['id'] = array('not between','1,8'); id NOT BETWEEN 1 AND 8
    in in $where['id'] = array('in','1,5,8'); id in(1,5,8)
    not in not in $where['id'] = array('not in','1,5,8'); id not in(1,5,8)
    and(默认) and $where['id'] = array(array('gt',1),array('lt',10)); (id > 1) AND (id < 10)
    or or $where['id'] = array(array('gt',3),array('lt',10), 'or'); (id > 3) OR (id < 10)
    xor(异或) xor 两个输入中只有一个是true时,结果为true,否则为false,例子略。 1 xor 1 = 0
    exp 综合表达式 $where['id'] = array('exp','in(1,3,8)'); $where['id'] = array('in','1,3,8');

    MySQL where条件表达式运算符参见:《MySQL WHERE 条件》。

    补充说明

    • 同 SQL 一样,ThinkPHP运算符不区分大小写,eq 与 EQ 一样。
    • between、 in 条件支持字符串或者数组,即下面两种写法是等效的:
    $where['id']  = array('not in','1,5,8');
    $where['id']  = array('not in',array('1','5','8'));

    exp 表达式

    上表中的 exp 不是一个运算符,而是一个综合表达式以支持更复杂的条件设置。exp 的操作条件不会被当成字符串,可以使用任何 SQL 支持的语法,包括使用函数和字段名称。
    exp 不仅用于 where 条件,也可以用于数据更新,如: 

    $Dao = M("Article");
    
    // 构建 save 的数据数组,文章点击数+1
    $data['aid'] = 10;
    $data['counter'] = array('exp','counter+1');
    
    // 根据条件保存修改的数据
    $User->save($data);
    

    ThinkPHP 模型方法 getField() 和 select() 使用技巧

    ThinkPHP 模型方法 setInc() 和 setDec() 使用详解

  • 相关阅读:
    Kubernetes 集成研发笔记
    Rust 1.44.0 发布
    Rust 1.43.0 发布
    PAT 甲级 1108 Finding Average (20分)
    PAT 甲级 1107 Social Clusters (30分)(并查集)
    PAT 甲级 1106 Lowest Price in Supply Chain (25分) (bfs)
    PAT 甲级 1105 Spiral Matrix (25分)(螺旋矩阵,简单模拟)
    PAT 甲级 1104 Sum of Number Segments (20分)(有坑,int *int 可能会溢出)
    java 多线程 26 : 线程池
    OpenCV_Python —— (4)形态学操作
  • 原文地址:https://www.cnblogs.com/52php/p/5680917.html
Copyright © 2011-2022 走看看