tp获取sql_【三十三】thinkphp之SQL查询语句(全)

本文详细介绍了ThinkPHP框架中关于SQL查询的各种方法,包括字符串条件查询、使用索引数组和对象方式查询、表达式查询、快捷查询、区间查询、组合查询、统计查询、动态查询、SQL查询以及连贯查询等,提供了丰富的示例代码,帮助开发者更好地理解和运用ThinkPHP的查询功能。
摘要由CSDN通过智能技术生成

一:字符串条件查询

//直接实例化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'

三:使用对象方式查询

namespace Home\Controller;useThink\Controller;useThink\stdClass;class EleController extendsController

{$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());

命名空间

命名范围其实就是将 SQL 语句封装在模型定义类里,而不在控制器里。

在Model下新建一个User1Model.class.php文件

namespace Home\Model;useThink\Model;class User1Model extendsModel

{//定义属性

protected $_scope = array( //属性名必须是_scope

'sql1'=>array('where'=>array('id'=>1),),

'sql2'=>array('order'=>'date DESC',

'limit'=>2,),

'default'=>array('where'=>array('id'=>2),),);

}

命名范围支持的属性有:where、field、order、table、limit、page、having、group、lock、distinct、cache

在Controller目录下新建一个User1Controller.class.php文件

namespace Home\Controller;useThink\Controller;useHome\Model\User1Model;class User1Controller extendsController {public functionmodel(){//ps:一定要填入表名,user1

// 他会先去model文件夹找有没有user1model

// 如果有就应用

// 如果没有,会直接引用model基类

$user=D('user1');//sql语句:SELECT * FROM `user1` WHERE `id` = 1

var_dump($user->scope('sql1')->select());

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值