美文网首页
ThinkPHP查询

ThinkPHP查询

作者: 慢慢来111 | 来源:发表于2017-03-06 21:06 被阅读97次

    查询方式

    Thinkphp提供了三种基本的查询方式:字符串条件查询、索引数组条件查询和对象条件查询、在大多数情况下,推荐使用索引数组和对象方式为查询条件,因为会更加安全
    1、使用字符串作为条件查询
    //字符串作为条件查询
    $user = M('User');
    var_dump($user->where(' id = 1 AND user = “蜡笔小新” ')->select());
    
    PS:where查询方法里面只要包含条件即可,多个条件加上AND等链接符即可,我们会在SQL连贯操作详细学习。
    
    2、使用索引数组作为查询条件
    //索引数组作为条件查询
    $user = M('User');
    $condition[' user '] = '蜡笔小新';
    $condition[' id'] = '蜡笔小新';
    var_dump($user->where($condition)->select());
    
    PS:索引数查询的默认逻辑关系是AND,如果想改变为OR,可以使用_logic定义查询逻辑
    
    基于上面的代码增加如下一行:
    $condition['_logic'] = 'OR'  //将默认AND改为OR
    
    3、使用对象方式来查询
    //对象作为条件查询
    $user = M('User');
    $condition = new \stdClass();
    $condition->id = 1;
    $condition->user = '蜡笔小新'
    var_dump($user->where($condition)->select());
    
    PS:stdClass类是PHP内置的类,可以理解为一个空雷,在这里可以理解为把条件的字段作为成员保存在stdClass类里,而这里的‘\’是将命名空间设置为根目录,否则会导致当前目录找不到次类。
    PS:使用对象和数组查询,效果是一样的,可以互换,在大多数情况下,tinkPHP推荐使用数组形式更加高效
    

    表达式查询

    对于那些药实现模糊判断的查询,比如大于、等于、小于之类的SQL查询,可以使用表达式查询方式
    查询表达式格式:$map['字段名'] = array(' 表达式 ' , ‘ 查询条件 ’);
    表达式查询表
    
    表达式                            含义
    EQ                               等于
    NEQ                              不等于
    GT                               大于
    EGT                              大于等于
    LT                               小于
    ELT                              小于等于
    [NOT]LIKE                        模糊查询
    [NOT]BETWEEN                    (不在)区间查询
    [NOT]IN                         (不在)IN查询
    EXP                              表达式查询,支持SQL语法
    
    PS:表达式不区分大小写
    //查询表达式:$map['字段名'] = array('表达式',"查询条件");
    $user = M('User');
    
    //等于
    $map['id'] = array('eq',1);//id这个字段 的值等于(eq)1
    
    //不等于
    $map['id'] = array('neq',1);//id这个字段 的值不等于(neq)1,这时候会查出所有id不等于1的值
    
    //模糊查询
    $map['user'] = array('like','%小%');//模糊查询user里面带小字的
    
    //模糊查询的数组方式
    $map['user'] = array('like' , array('%小%', '%腊%'), 'AND');//又包含小的  又包含腊的  如果不写AND 那就当是或了。会查出既包含小的,又包含腊的
    
    //区间查询
    $map['id'] = array('between' , '1,3') //查询id在1到3区间的条目
    
    //区间查询数组形式
    $map['id'] = array('between', array('1','3'));//查询id在1到3之间的条目
    
    //区间查询 不在范围之内的
    $map['id'] = array('not between', '1,3');//查询id 不在1到3的范围之内的所有元素
    
    //IN区间查找
    $map['id'] = array('in' , '1,2,4');//查询id等于1,2,4的条目
    
    //not IN 查找
    $map['id'] = array('not in' , '1,2,4');//查询id 不等于1,2,4的条目。
    
    //小于查询
    $map['id'] = array('exp' , '<1');//查询id
    var_dump($user->where($map)->select());
    

    快捷查询

    //快捷查询方式是一中多字段查询的简化写法,在多个字段之间用 ' | '隔开表示OR,用‘&’隔开表示AND
    1、不同字段相同查询条件
    //使用相同的查询条件
    $user = M('User');
    $map[' user|email '] = 'a';   // ' | '换成‘ & ’变成AND
    var_dump($user->where($map)->select());
    
    2、不同字段不同查询条件
    //使用不同查询条件
    $user = M(' User ');
    $map[' id&user '] = array(1, '蜡笔小新',_multi=>true);
    var_dump($user->where($map)->select());
    
    PS:设置‘_multi’为true,是为了让id对应1,让user对应‘蜡笔小新’,否则就会出现id对应了1还要对应‘蜡笔小新’的情况,而且,这设置要在放在数组最后
    
    //支持使用表达式结合快捷查询
    $user = M('User');
    $map[' id&user '] = array(array(' gt ' ,0), '蜡笔小新' ,'_multi '=>true);
    var_dump($user->where($map)->select());
    

    区间查询

    ThinkPHP支持对某个字段的区间查询
    //区间查询
    $user = M('User');
    $map[' id '] = array( array(' gt ' , 1 ) , array( ' lt ' , 4 ) );//意思是id大于1 和id小于4的。
    var_dump($user->where($map)->select());
    
    //第三个参数设置逻辑OR
    $user = M(' User ');
    $map[' id '] = array( array(' gt ' , 1) , array( ' lt ' , 4) , 'OR');
    var_dump($user->where($map)->select);
    

    组合查询

    组合查询是基于索引数组查询方式的一个拓展性查询,添加了字符串查询(_string),复合查询(_complex),请求字符串查询(_query),由于采用的是索引数组,重复的会被覆盖。
    //字符串查询(_string)
    $user = M(User);
    $map[' id '] = array(' eq ' , 1);
    $map[' _string '] = ' user= "蜡笔小新" AND mail = “xiaoxin@163.com” ';
    var_dump($user->where($map)->select());
    
    //请求字符串查询(_query)
    $user = M('User');
    $map[' id '] = array('eq' ,1);
    $map['_query'] = 'user = 蜡笔小新&maile = xiaoxin@163.com&_logic=OR';
    var_dump($user->where($map)->select());
    
    PS:这总方式是URL方式,不需要加引号
    
    //复合查询(_complex)
    $user = M(User);
    $where[' user '] = array(' like ' , ' %小% ');
    $where['id'] = 1;
    $where['_logic'] = 'OR'
    $map['_complex'] = $where;
    $map['id'] = 3;
    $map['_logic'] = 'OR'
    var_dump($user->where($map)-select());
    
    PS:复合查询可以构建更加复杂的查询,这里id=1或者id = 3可以构建实现。
    

    统计查询

    //Tinkphp提供了一些统计查询的方法
    //数据总条数,遇到NULL不统计
    $user = M('User');
    var_dump($user->count(' mail ' ) );
    
    //最大值
    $user = M('User');
    var_dump($user->max(' id ' ) );
    
    //最小值
    $user = M('User');
    var_dump($user->min(' id ' ) );
    
    //平均值
    $user = M('User');
    var_dump($user->avg(' id '));
    
    //求总和
    $user = M(' User ');
    var_dump($user->sum(' id '));
    

    动态查询

    借助PHP5语言的特性,ThinkPhp实现了动态查询
    1、getBy动态查询
    //查找mail=xiaoxin@163.com的数据
    $user = M('User');
    var_dump($user->getByMail('xiaoxin@163.com'));
    2、getFieldBy动态查询
    //通过user得到相应id值
    $user = M('User');
    var_dump($user->getFieldByUser('路飞',‘id’));
    

    SQL查询

    ThikPHP支持原生SQL查询
    1、query读取
    //查询结果集,如果采用分布式读写分离,即始终在读服务器执行。
    $user = M('User');
    var_dump($user->query('SELECT *FROM think_user'));

    2、execute写入
    //更新和写入,如果采用分布式读写分离,则始终在写服务器执行
    $user = M('User');
    var_dump($user->execute('UPDATE think_user set user=''蜡笔大新“ WHERE id=1' ));
    PS:由于子查询用了不少连贯操作,我们会在连贯才做讲解。

    //实例化Model类
    //字符串作为条件查询
    $user = M('User');
    //查出user表中的 id=1的 名称为蜡笔小新的数据。
    var_dump($user->where('id=1 AND user="蜡笔小新" ')->select())
    
    
    
    
    -----------------分割线-----------------
    
    
    
    -----------------分割线-----------------
    
    
    
    
    
    --------------------------分割线----------------------
    
    ####快捷查询
    快捷查询方式是一种多字段查询的简化写法,在多个字段之间用'|'隔开表示OR,用‘&’隔开表示AND
    
    1、不同字段相同查询条件
    //使用字段相同查询条件
    $user = M('User');
    $map['user|email'] = 'a';        //'|'换成‘&’变成AND
    
    2、不同字段不同查询条件
    //使用不同查询条件
    $user = M('User');
    $map['id&user'] = array(1,'蜡笔小新',‘_multi’=>true);//这句代码的意思是id和user分别对应着1  和 蜡笔小新  _multi=>true意思是一一对应。如果不写这个得话,会出现id对应了1还要对应‘蜡笔小新’的情况,而且,这设置要放在数组最后。
    
    //支持使用表达式结合快捷查询
    $user = M('User');
    $map['id&user'] = array(array('gt',0),'蜡笔小新',‘_multi’=>true);//gt的意思是大于  整体的意思是 id大于0的 user是蜡笔小新的 这一条。
    
    ----------------分割线----------
    ###组合查询
    
    $user = M('User');
    $map['id'] = array('eq',1);
    $map['_string'] = 'user="蜡笔小新" AND email=“xiaoxin@163.com” ';//
    var_dump($user->where($map)->select());
    
    

    六、统计查询

    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:ThinkPHP查询

          本文链接:https://www.haomeiwen.com/subject/kaixgttx.html