zoukankan      html  css  js  c++  java
  • SQL查询语句 [2]

    一、快捷查询

    快捷查询方式是一种多字段查询的简化写法,在多个字段之间用'|'隔开表示OR,用'&'
    隔开表示 AND。

    1.不同字段相同查询条件

    在  Home/controller/UserController.class.php   中插入

    //使用相同查询条件
    $user = M('User');
    $map['user|email'] = '蜡笔小新'; //'|'换成'&'变成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 还要对应'蜡笔小新'的情况。而且,这设置要在放在数组最后。

    如果不加 '_multi'=> true 这行语句,则在调试中为:

    //支持使用表达式结合快捷查询
    $user = M('User');
    $map['id&user'] =  array( array('gt', 0),'蜡笔小新','_multi'=> true);
    var_dump($user->where($map)->select());

    其中 array('gt', 0) 在上一篇已经讲过了,是指大于0的数据,即id大于0的数据都符合条件

    二、区间查询

    ThinkPHP 支持对某个字段的区间查询。

    //区间查询
    $user = M('User');
    $map['id'] =  array( array('gt', 1),  array('lt', 4));
    var_dump($user->where($map)->select());

    即为符合id大于1且小于4的数据

    //第三个参数设置逻辑OR
    $user = M('User');
    $map['id'] =  array( array('gt', 1),  array('lt', 4), 'OR');
    var_dump($user->where($map)->select());

    这是符合id大于1或者id小于4的数据。

    三、组合查询

    组合查询是基于索引数组查询方式的一个扩展性查询,添加了字符串查询(_string)、复
    合查询(_complex)、请求字符串查询(_query),由于采用的是索引数组,重复的会被覆盖。

    1、字符串查询(_string)

    //字符串查询(_string)
    $user = M('User');
    $map['id'] =  array('eq', 1);
    $map['_string'] ='user="蜡笔小新" AND email="xiaoxin@163.com"';
    var_dump($user->where($map)->select());

    这时浏览器中调试的SQL查询方式为:

    看到查询语句中的user和email都没有类似单引号``(键盘上1的左边的那个符号),这样的查询方式不大安全;

    2、请求字符串查询(_query)

    //请求字符串查询(_query)
    $user = M('User');
    $map['id'] =  array('eq', 1);
    $map['_query'] ='user=蜡笔小新&email=xiaoxin@163.com&_logic=OR';
    var_dump($user->where($map)->select());

    这样的方式比较好用,也可以叫URL查询方式,只用&符号就可以,也不用添加单引号,且SQL的查询方式为:

    可以看到这时候查询的语句中user和email都加上了``,这样的查询方式也比较安全。

    另外说明一点的就是

    $user =  M('User');
    $map['id']=array('eq',1);
    $map['id']=2;
    var_dump($user->where($map)->select());

    这时,SQL查询的就只有id=2的数据了,  $map['id']=2;  会将  $map['id']=array('eq',1);  覆盖掉

    3、复合查询(_complex)

    $user =  M('User');
    $map['id']=array('eq',1);
    $where['id']=2;
    $map['_complex']=$where;
    var_dump($user->where($map)->select());

    这里新添加了一个数组$where,第2中方法中也说了   $map['id']=2;  会将 $map['id']=array('eq',1); 覆盖掉

    使用复合查询后,对应的SQL查询语句为:

    这时默认的连接符是AND,如果想换成或,则添加一条语句 $map['_logic']='OR'; 即可

    四、统计查询

    查询有多少条目

    $user =  M('User');
    var_dump($user->count());

    这时SQL查询语句为:

    然后查询数据库中某一个名字下有多少条数据

    首先我们的数据库是这样的

    然后我们单独查询email下有多少条:

    $user =  M('User');
    var_dump($user->count('email'));

    查询后显示的结果为 string(1) "4"  这时我们手动添加一条数据

    首先我们把email设置为可以为空,如下图所示

    然后添加一条数据,这时email栏不添加任何数据,添加后如下图所示

    这时,再查询email的有多少条时,显示的为 string(1) "4"  ,我们给user为'李艳辉'的email添加为'yanhui@163.com',再查询,则显示为 string(1) "5"  

    也就是字段总条数,遇到NULL不统计。

    下面是查询数据库的一些其他的信息

     var_dump($user->max('id'));  查询id的最大值

     var_dump($user->min('id')); 查询id的最小值

     var_dump($user->avg('id')); 查询id的平均值

     var_dump($user->sum('id')); 查询id的总值

    五、动态查询

    借助 PHP5 语言的特性,ThinkPHP 实现了动态查询。

    1.getBy 动态查询

    $user =  M('User');
    var_dump($user->getByEmail('xiaoxin@163.com'));

    直接查询email为xiaoxin@163.com的数据

    也可以使用 var_dump($user->getByUser('蜡笔小新')); 来获得该条目的数据

    也就是getBy后面接的必须是建立的数据表中的名字

    2、getFieldBy 动态查询

    //通过user得到相对应id值
    $user = M('User');
    var_dump($user->getFieldByUser('路飞', 'id'));

    这时,将id改为email,也可得到eamil的值,但是getFieldByUser中第一个参数必须是user对应的名字。

    同样的 getFieldByUser 也可以换成 getFieldByid 等,然后括号内第一个参数为id对应的值,后面一个参数是查询的建立的数据表中的名字。

    六、SQL查询

    ThinkPHP支持原生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'));
  • 相关阅读:
    PYTHON 集合set 方法
    PYTHON 购物车程序
    转 mybatis javaType与jdbcType对应
    转 java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
    转 Could not create the view: An unexpected exception was thrown.问题解决
    [转] 数据库链接池配置
    HttpServletRequest.getServletContext()一直提示找不到,而引出的问题
    如何解决找不到方法HttpServletRequest.getServletContext() ---- NoSuchMethodError
    web项目编译出错时,原因之一,可能是build path 中order and Export引起
    mysql修改密码
  • 原文地址:https://www.cnblogs.com/jacson/p/4476516.html
Copyright © 2011-2022 走看看