• 掌握Thinkphp3.2.0----SQL查询


    首先,先谈一下对查询的理解:查询的对象是数据库中的数据表,一个或多个;查询的限制就是各种条件或要求;查询的结果=表对象+限制(条件)。

    对数据表的操作(CRUD)查询是最复杂也是最关键的一步!'SELECT * FROM  WHERE [condition]',WHERE是对基本的限制条件。

    对象即数据库中数据表是不用变化的,需要变化的是查询的条件。

    条件的形式

      1.基本形式----字符串形式。万能形式,查询不安全(不会自动添加安全符号``),就相当于在前边的sql语句上连缀后边的条件。

    1 $user = M('User');
    2 //字符串的查询条件
    3 $where_str = '`this is a string`';
    4 //显示测试结果
    5 $result = $user -> where($where_str) -> select();
    6 var_dump($result);

     结果:

      可见就是在WHERE之后的条件中写入该字符串,也就该形式可以实现所有的WHERE关键字的SQL查询。

    例如:

      

    1         $user = M('User');
    2         //字符串的查询条件
    3         $where_str = 'id=1';
    4         //显示测试结果
    5         $result = $user -> where($where_str) -> select();
    6         var_dump($result);    

    结果:

      

      2.数组形式条件。还是针对WHERE查询,就是把WHERE查询的条件分开,例如id=1条件,分成 id 和 1两部分,写入数组id做键,1做值,另外写入控制符。

    数组是比较推荐的形式,这里是数组形式,值是字符串或整型或浮点

    例子:

    1  $user = M('User');
    2 //数组形式的条件
    3 $condition['id'] = array(1);
    4 //显示测试结果
    5 $result = $user -> where($condition) -> select();
    6 var_dump($result);    

    结果:

    示例

     3.对象形式的条件。和数组很像,只是更换了数据的载体为对象(stdClass空对象,PHP程序提供)

      4.表达式查询。实际就是来更改条件中运算符的。根据运算符的不同可能有不同的结构,这种形式相对灵活,可以写出很复杂的SQL查询语句,不行不是还有一个自定义吗。

    基本结构:      查询表达式格式:$map['字段名'] = array('表达式','查询条件');---数组形式,值是数组.查询条件可以是数组,只是对有的表达式没有作用,比如EQ

    LIKE/NOTLIKE

     

    BETWEEN/NOT BETWEEN

    1 $user = M('User');
    2 //表达式形式
    3 // $map['id'] = array('BETWEEN','1,10');这两种形式一样
    4 $map['id'] = array('BETWEEN',array(1,10));
    5 
    6 $result = $user -> where($map) -> select();
    7 var_dump($result);

    IN/NOTIN-----IN是IN,BETWEEN是BETWEEN!

    $user = M('User');
    //表达式形式
    $map['id'] = array('BETWEEN','1,10');
    // $map['id'] = array('IN',array(1,6));这两种形式一样
    
    $result = $user -> where($map) -> select();
    var_dump($result);

     自定义形式:有点像连缀

    还有几种其他的形式,多写,找到合适简便就可以了

    快捷方式  | &  

      

    等价效果:

     1 $user = M('User');
     2         //快捷方式
     3         $map['id&user'] = 1;
     4         // 等价于
     5         // $map['id'] = 1;
     6         // $map['user'] = 1;
     7         // $map['_logic'] = 'AND';
     8         // 或等价于
     9         // $condition = 'id=1 AND user=1';
    10         $result = $user -> where($map) -> select();
    11         var_dump($result);

    和表达式结合:

    1 $user = M('User');
    2         //快捷方式
    3         $map['id&user'] = array(array('NEQ',1),array('EQ',1),'_multi'=>true);
    4         $result = $user -> where($map) -> select();
    5         var_dump($result);

    结果:

    SELECT * FROM `think_user` WHERE ( (`id` <> 1) AND (`user` = 1) ) [ RunTime:0.001000s ]感觉这是最好的

     还有,不一定是连个字段,可以是3个或多个字段

     再:

    $map['_string'] = '';连缀字符串,可以连接到其他条件上

    $map['query'] = '';URL模式,比较方便

    $map['_complex'] = '';被覆盖的时候使用

     1 $user = M('User');
     2         //组合查询
     3         /*     $map['id'] = 1;
     4             $map['_string'] = 'user=1 AND email like 3';继续连接字符串形式的条件
     5         */
     6         /*     $map['id'] = 1;
     7             $map['_query'] = 'user=1&email=2';//貌似运算符只能是=
     8         */
     9         /*     $where['id'] = 1;
    10             $map['id'] = 1;
    11             $map['_complex'] = $where;
    12             $map['_logic'] = 'OR';
    13         */        
    14         $result = $user -> where($map) -> select();
    15         var_dump($result);

    统计查询:$user->count();

    动态查询: getById()  getFieldByUser();

    SQL原生

    query();读

    excute();写

  • 相关阅读:
    MySQL主从复制集群添加slave节点
    GTID主从 与 传统主从复制
    20201207总结
    202011051 每周例行报告
    202011121 每周例行报告
    202010081 每周例行报告
    202011261 每周例行报告
    202010153 每周例行报告
    202010291 每周例行报告
    202011201 每周例行报告
  • 原文地址:https://www.cnblogs.com/zhengfengyun/p/6107790.html
Copyright © 2020-2023  润新知