ThinkPHP多表查询

简介:

ThinkPHP多表查询处理

ThinkPHP多表连接查询处理

ThinkPHP关联查询(多表查询)


网上找到三种方法:table()、join()、原生SQL语句查询。(以下三种方法输出结果一致,并且很好的保留了ThinkPHP自己的分页功能)


第一种:table()方法

实例:需要连接查询两张表(表agent和表transinfo)

1
2
3
4
5
6
7
8
9
$Model = new  Model();
$sqlcount = "select count(*) as mycount  from agent a ,transinfo t where t.clientId=a.id and t.transType like '%agent%' and a.id in (" . $agent_str . ")" ;
$listCount  $Model  ->query( $sqlcount );
$Page  new  Page (  $listCount [0][mycount], 2 );
$show  $Page ->show ();
$list  $Model ->table( 'agent a, transinfo t' )->where( "t.clientId=a.id and t.transType like '%agent%' and a.id in (" . $agent_str . ")" )->limit (  $Page ->firstRow .  ','  $Page ->listRows )->select();
//echo $Model->getLastSql();
$this ->assign( 'list' , $list ); // 赋值数据集
$this ->assign( 'page' , $show ); // 赋值分页输出



第二种:join()方法

实例:需要连接查询两张表(表agent和表transinfo)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$Model = new  Model();
$agentModel  $Model ->Table( "agent" );
$listCount  $agentModel ->join( " AS a RIGHT JOIN transinfo t ON t.clientId=a.id and t.transType like '%agent%' and a.id in (" . $agent_str . ")" )
             ->field( "count(*) as mycount" )
             ->select();
$Page  new  Page (  $listCount [0][mycount], 2 );
$show  $Page ->show ();
 
$Model = new  Model();
$agentModel  $Model ->Table( "agent" );
$list  =     $agentModel ->join( " AS a RIGHT JOIN transinfo t ON t.clientId=a.id and t.transType like '%agent%' and a.id in (" . $agent_str . ") order by t.id DESC limit " . $Page ->firstRow. "," . $Page ->listRows)
             ->field( "a.*,t.*" )
             ->select();
//echo $agentModel->getLastSql();
$this ->assign( 'list' , $list ); // 赋值数据集
$this ->assign( 'page' , $show ); // 赋值分页输出

提示:你也可以这样实例化更简洁(官方推荐的):$agentModel = M('Agent'); // 实例化User对象



第三种:原生SQL语句查询法

1
2
3
4
5
6
7
8
9
$Model = new  Model();
$sqlcount = "select count(*) as mycount  from agent a ,transinfo t where t.clientId=a.id " . $where " and t.transType like '%agent%' and a.id in (" . $agent_str . ")" ;
$listCount  $Model  ->query( $sqlcount );
$Page  new  Page( $listCount [0][ 'mycount' ],2); // 实例化分页类 传入总记录数和每页显示的记录数
$show  $Page ->show();
$sqlList = "select t.*,a.* from agent a ,transinfo t where t.clientId=a.id " . $where " and t.transType like '%agent%' and a.id in (" . $agent_str . ") limit {$Page->firstRow},{$Page->listRows}" ;
$list  $Model  ->query( $sqlList );
$this ->assign( 'list' , $list ); // 赋值数据集
$this ->assign( 'page' , $show ); // 赋值分页输出




参考资料:

http://hi.baidu.com/wjlhh001/item/18d9a91031081b5e2a3e22af

http://www.yunda51.com/304.html

http://www.w3school.com.cn/sql/sql_join_right.asp


   本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1564492,如需转载请自行联系原作者








相关文章
|
测试技术 PHP 数据库
ThinkPHP6.0使用PHPUnit进行单元测试
ThinkPHP6.0使用PHPUnit进行单元测试
1017 0
ThinkPHP6.0使用PHPUnit进行单元测试
|
11月前
|
存储 移动开发 前端开发
HTML基础知识:构建网页的基石
【10月更文挑战第11天】HTML基础知识:构建网页的基石
601 0
|
10月前
|
监控 安全 Cloud Native
云原生安全:Istio在微服务架构中的安全策略与实践
【10月更文挑战第26天】随着云计算的发展,云原生架构成为企业数字化转型的关键。微服务作为其核心组件,虽具备灵活性和可扩展性,但也带来安全挑战。Istio作为开源服务网格,通过双向TLS加密、细粒度访问控制和强大的审计监控功能,有效保障微服务间的通信安全,成为云原生安全的重要工具。
176 2
|
6月前
|
前端开发 JavaScript 数据格式
通过array.reduce()实现数据汇总、条件筛选和映射、对象属性的扁平化、转换数据格式、聚合统计、处理树结构数据和性能优化,reduce()的使用详解(附实际应用代码)
array.reduce()可以用来数据汇总、条件筛选和映射、对象属性的扁平化、转换数据格式、聚合统计、处理树结构数据、性能优化等,使用难度相对高一些,但是能大大减少代码量。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时
ly~
|
12月前
|
传感器 存储 供应链
大数据在供应链管理中的具体应用案例
以下是大数据在供应链管理中的具体应用案例:沃尔玛通过整合内外部数据进行需求预测,提前调配应急物资;亚马逊利用大数据优化库存管理,提高周转率并降低成本;DHL通过传感器收集数据优化物流路线,提升运输效率。大数据的优势在于提高需求预测准确性、优化库存管理、提升物流效率、增强供应商管理和提高供应链可视性,从而实现全方位的供应链优化。
ly~
2774 2
|
弹性计算 NoSQL 安全
如何在阿里云服务器上安装Redis数据库
如何在阿里云服务器上安装Redis数据库
10537 2
|
12月前
|
SQL 关系型数据库 MySQL
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
本文介绍了在ThinkPHP6框架中如何连接和使用数据库进行增删改查操作。内容包括配置数据库连接信息、使用Db类进行原生MySQL查询、find方法查询单个数据、select方法查询数据集、save方法添加数据、insertAll方法批量添加数据、insertGetId方法添加数据并返回自增主键、delete方法删除数据和update方法更新数据。此外,还说明了如何通过数据库配置文件进行数据库连接信息的配置,并强调了在使用Db类时需要先将其引入。
ThinkPHP6 连接使用数据库,增删改查,find,select,save,insert,insertAll,insertGetId,delete,update方法的用法
golang使用gorm操作mysql3,数据查询
golang使用gorm操作mysql3,数据查询
|
应用服务中间件 Shell nginx
【Docker】Docker安装Nginx配置静态资源
【Docker】Docker安装Nginx配置静态资源
700 0