收藏thinkphp之SQL查询语句(全)

一:字符串条件查询

        //直接实例化Model
        $user=M('user1');
        var_dump($user->where ('id=1 OR age=55')->select());

最终生成的sql语句为:SELECT * FROM `user1` WHERE ( id=1 OR age=55 )

PS:where 查询方法里面只要包含条件即可,多个条件加上 AND 等连接符即可

二:使用索引数组作为查询条件

        $user=M('user1');
        $condition['age']='55';
        $condition['name']='zs';
        // 索引数组查询的默认逻辑关系是 AND,如果想改变为 OR,可以使用_logic 定义查询逻辑
        $condition['_logic'] = 'OR';
        var_dump($user->where($condition)->select());

最终生成的sql语句为:SELECT * FROM `user1` WHERE `id` = ‘1’ AND `name` = 'zs'

三:使用对象方式查询

<?php
namespace Home\Controller;
use Think\Controller;
use Think\stdClass;
class EleController extends Controller
{
        $user=M('user1');
        $condition=new \stdClass;
        $condition->id = '1';
        var_dump($user->where($condition)->select());
}

最终生成的sql语句为:SELECT * FROM `user1` WHERE `id` = ‘1’

四:表达式查询

查询表达式格式:$map['字段名'] = array('表达式','查询条件');

        $user=M('user1');
        $map['age'] = array('eq', 55); //where 为 age=55
        var_dump($user->where($map)->select());  

 五:快捷查询

      //使用相同查询条件
        $user = M('user1');
        $map['name|email'] = 'a'; //'|'换成'&'变成AND
        var_dump($user->where($map)->select());
        // 不同字段不同查询条件
        //使用不同查询条件
        $user = M('user1');
        $map['name&email'] =array('a','test@qq.com','_multi'=>true);
        var_dump($user->where($map)->select());    

第一条查询的结果:SELECT * FROM `user1` WHERE ( `name` = 'a' OR `email` = 'a' ) 

第二条查询的结果:SELECT * FROM `user1` WHERE ( (`name` = 'a') AND (`email` = 'test@qq.com') )

六:区间查询

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

七:组合查询

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

  //字符串查询(_string)
        $user = M('user1');
        $map['name'] = array('eq', 'zs');
        $map['_string'] ='age="30" AND email="zs@qq.com"';
        var_dump($user->where($map)->select());
        //请求字符串查询(_query)
        $user = M('user1');
        $map['id'] = array('eq', "1");
        $map['_query'] ='name=zs&email=zs@qq.com&_logic=OR';
        var_dump($user->where($map)->select());
        //复合查询(_complex)
        $user = M('user1');
        $where['name'] = array('like', 'z');
        $where['id'] = 1;
        $where['_logic'] = 'OR';
        $map['_complex'] = $where;
        $map['id'] = 3;
        $map['_logic'] = 'OR';
        var_dump($user->where($map)->select());

第一条查询语句:SELECT * FROM `user1` WHERE `name` = 'zs' AND ( age="30" AND email="zs@qq.com" )

第二条查询语句:SELECT * FROM `user1` WHERE `name` = 'zs' AND ( age="30" AND email="zs@qq.com" ) AND ( `name` = 'zs' OR `email` = 'zs@qq.com' )

第三条查询语句:SELECT * FROM `user1` WHERE `name` = 'zs' OR ( age="30" AND email="zs@qq.com" ) OR ( `name` = 'zs' OR `email` = 'zs@qq.com' ) OR ( `name` LIKE 'z' OR `id` = 1 ) 

 八:统计查询

 //数据总条数
        //SHOW COLUMNS FROM `user1`
        $user = M('user1');
        var_dump($user->count());
        //字段总条数,遇到NULL不统计
        //SELECT COUNT(*) AS tp_count FROM `user1` LIMIT 1
        $user = M('user1');
        var_dump($user->count('email'));
        //最大值
        //SELECT MAX(id) AS tp_max FROM `user1` LIMIT 1 
        $user = M('user1');
        var_dump($user->max('id'));
        //最小值
        //SELECT MIN(id) AS tp_min FROM `user1` LIMIT 1
        $user = M('user1');
        var_dump($user->min('id'));
        //平均值
        //SELECT AVG(id) AS tp_avg FROM `user1` LIMIT 1 
        $user = M('user1');
        var_dump($user->avg('id'));
        //求总和
        //SELECT SUM(id) AS tp_sum FROM `user1` LIMIT 1
        $user = M('user1');
        var_dump($user->sum('id'));

九:动态查询

     // 1.getBy 动态查询
        //查找email=xiaoin@163.com的数据
        //SELECT * FROM `user1` LIMIT 1 
        $user = M('user1');
        var_dump($user->getByemail('zs@qq.com'));
        // 2.getFieldBy 动态查询
        //通过user得到相对应id值
        //SELECT `id` FROM `user1` LIMIT 1
        $user = M('user1');
        var_dump($user->getFieldByUser('ls', 'id'));

十:SQL查询

    
     // 1.query 读取
        //查询结果集,如果采用分布式读写分离,则始终在读服务器执行
        //SELECT * FROM user1
        $user = M('user1');
        var_dump($user->query('SELECT * FROM user1'));
        // 2.execute写入
        //更新和写入,如果采用分布式读写分离,则始终在写服务器执行
        //UPDATE user1 set name="xuexi" WHERE id="1";
        $user = M('user1');
        var_dump($user->execute('UPDATE user1 set name="xuexi" WHERE
         id="1";'));

 十一:连贯查询

 通过连贯操作可以有效的提供数据存取的代码清晰度和开发效率,并且支持所有的 CURD 操作

//连贯操作
        //PS:这里的 where、order 和 limit 方法都是连贯操作方法,所以它们都能返回$user本身,可以互换位置。而 select 方法不是连贯方法,需要放在最后,用以显示数据集。
        //SELECT * FROM `user1` WHERE ( id in (1,2,3,4) ) LIMIT 2 
        $user=M('user1');
        var_dump($user->where('id in (1,2,3,4)')->limit(2)->select());
        //数组操作
        //SELECT * FROM `user1` WHERE id in (1,2,3,4) LIMIT 2 
        $user = M('user1');
        var_dump($user->select(array('where'=>'id in (1,2,3,4)', 'limit'=>'2',
        )));
        // CURD处理
        // SELECT * FROM `user1` WHERE ( id=1 ) LIMIT 1
        // DELETE FROM `user1` WHERE ( id=2 )
        $user = M('user1');
        var_dump($user->where('id=1')->find());
        var_dump($user->where('id=2')->delete());

 1.where(支持字符串条件、数组条件(推荐用法)和多次调用。)

//字符串方式
        //SELECT * FROM `user1` WHERE ( id=6 )
        var_dump($user->where('id=6')->select());

        //索引数组方式
        // SELECT * FROM `user1` WHERE `id` = 6
        $map['id']=6;
        var_dump($user->where($map)->select());

        //多次调用方式
        SELECT * FROM `user1` WHERE `id` = 6 AND ( name="test" ) 
        $map['id']=array('eq',6);
        var_dump($user->where($map)->where('name="test"')->select());
        

2.order 用于对结果集排序

// 倒序
        // SELECT * FROM `user1` ORDER BY id desc
        var_dump($user->order('id desc')->select());

        // 第二排序
        // SELECT * FROM `user1` ORDER BY id desc,age desc
        var_dump($user->order('id desc,age desc')->select());

        //数组形式,防止字段和mysql关键字冲突
        // SELECT * FROM `user1` ORDER BY `id` DESC,`email` DESC
        $map['id']=1;
        var_dump($user->order(array('id'=>'DESC','email'=>'DESC'))->select());

3.feild(feild 方法可以返回或操作字段,可以用于查询和写入操作。)

    
// 只显示id和name两个字段
      // SELECT `id`,`name` FROM `user1` 
        var_dump($user->field('id,name')->select());

      //使用SQL函数和别名
      // SELECT SUM(id) as count,`name` FROM `user1`
      var_dump($user->field('SUM(id) as count,name')->select());

      // 使用数组参数结合SQL函数
      // SELECT `id`,LEFT(name,1) AS `left_user` FROM `user1`
      var_dump($user->field(array('id','LEFT(name,1)'=>'left_user'))->select());

      //获取所有字段
      // SELECT * FROM `user1` 
      var_dump($user->field()->select());

      //用于写入
      $user->field('name,email')->create();

 4.limit(主要用于指定查询和操作的数量)

 //限制结果集数量
      // SELECT * FROM `user1` LIMIT 2
      var_dump($user->limit(2)->select());

      //分页查询
      // SELECT * FROM `user1` LIMIT 1,2 
      var_dump($user->limit(1,2)->select());

5.page(page 方法完全用于分页查询)

 //page分页
      // SELECT * FROM `user1` LIMIT 3,3
      var_dump($user->page(2,3)->select());

6.table(用于数据表操作,主要是切换数据表或多表操作)

//切换数据表
      // SELECT * FROM `test_user`
      var_dump($user->table('test_user')->select());

7.alias (用于设置数据表别名)

  // 设置别名
      // SELECT * FROM user1 a 
      var_dump($user->alias('a')->select());

8.group(用于对结合函数统计的结果集分组)

 // 分组统计
      // SELECT `name`,max(id) FROM `user1` GROUP BY id
      var_dump($user->field('name,max(id)')->group('id')->select());

9.having(用于配合 group 方法完成从分组的结果中再筛选数据)

  //分组统计结合having
      // SELECT `user`,max(id) FROM `user1` GROUP BY id HAVING id>2 
      var_dump($user->field('user,max(id)')->group('id')->having('id>2')->select());

10.comment (用于对 SQL 语句进行注释)

//SQL注释
      // SELECT * FROM `user1` /* test */
      var_dump($user->comment('test')->select());

ThinkPHP 中,如果需要使用 SQL 语句向 Oracle 数据库中的 CLOB 字段插入超过 4000 字节的数据,可以使用 Oracle 的 LOB API 进行分块插入。以下是一个示例代码: ```php // 假设 $clob_data 是要插入的大于 4000 字节的字符串 $clob_data = "这是一段超过 4000 字节的字符串..."; // 建立 Oracle 数据库连接 $db = Db::connect([ 'type' => 'oracle', 'hostname' => 'hostname', 'database' => 'database', 'username' => 'username', 'password' => 'password', ]); // 准备 SQL 语句,使用 :clob_bind 绑定 CLOB 字段 $sql = "INSERT INTO table_name (clob_field) VALUES (EMPTY_CLOB()) RETURNING clob_field INTO :clob_bind"; $stmt = $db->query($sql); // 获取 CLOB 对象 $clob = $stmt->fetch()['CLOB_FIELD']; // 将要插入的数据分块写入 CLOB 对象 $chunk_size = 4000; $offset = 0; while ($offset < strlen($clob_data)) { $chunk_data = substr($clob_data, $offset, $chunk_size); $clob->save($chunk_data); $offset += $chunk_size; } // 提交事务 $db->commit(); // 关闭资源 $clob = null; $stmt = null; $db = null; ``` 在上面的代码中,我们首先建立了一个 Oracle 数据库连接,并准备了要插入的 SQL 语句。我们使用 `RETURNING` 子句将插入的 CLOB 字段返回,然后使用 `FETCH()` 方法获取 CLOB 对象。接着,我们使用 `substr()` 函数将要插入的数据分块写入 CLOB 对象,直到所有数据都被写入。最后,我们提交事务并关闭资源。 请注意,上面的代码只是一个示例,实际应用中可能需要根据具体的情况进行调整。例如,可以根据需要调整分块大小,或者使用事务来确保数据插入的原子性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值