ThinkPHP多表查询

ThinkPHP多表查询处理

ThinkPHP多表连接查询处理

ThinkPHP关联查询(多表查询)

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

第一种:table()方法

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

$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)

$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语句查询法

$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

END

时间: 2024-10-25 11:58:31

ThinkPHP多表查询的相关文章

ThinkPHP 多表查询-如果字段A相同,则把字段B相加

在一个项目中,需要查询表tr_product中的user_id字段,如果user_id相同,则把其对应的money字段相加,数据库截图如下: 实现代码: $Model = D('Model'); $res =$Model->query("SELECT user_id,sum(money) from tr_order GROUP BY user_id"); 结果: array (size=2) 0 => array (size=2) 'user_id' => strin

ThinkPHP联表查询

1.table 方法 原生sql方法 原生sql语法:select 表1.字段,表2.字段 from 表1as 别名1,表名2 as 别名 2 where 表1.字段 = 表2.字段; select t1.*,t2.name as deptname from sp_user as t1,sp_dept as t2 where t1.dept_id = t2.id; $model -> table('表名1[as 别名1],表名2[as 别名2]--'); $result = $model ->

thinkphp中如何是实现多表查询

多表查询经常使用到,但如何在thinkphp中实现多表查询呢,其实有三种方法. 1 2 3 4 5 6 7 8 9 10 11 12 // 1.原生查询示例: $Model = new Model(); $sql = 'select a.id,a.title,b.content from think_test1 as a, think_test2 as b where a.id=b.id '.$map.' order by a.id '.$sort.' limit '.$p->firstRow.

THINKPHP 中关联查询(多表查询)

THINKPHP 中关联查询(多表查询)可以使用 table() 方法或和join方法,请看示例: 1.Table方法:定义要操作的数据表名称,可以动态改变当前操作的数据表名称,需要写数据表的全名,包含前缀,可以使用别名,例如: $Model->Table('think_user user') ->where('status>1') ->select(); $Model->table('think_blog blog,think_type type')->where('

thinkphp两表,多表联合查询及分页的连贯操作写法

ThinkPHP中关联查询(即多表联合查询)可以使用 table() 方法或和join方法,具体使用如下例所示: 1.原生查询示例: 代码如下: $Model = new Model(); $sql = 'select a.id,a.title,b.content from think_test1 as a, think_test2 as b where a.id=b.id '.$map.' order by a.id '.$sort.' limit '.$p->firstRow.','.$p-

ThinkPHP 数据库表结构处理类(简单实用)

<?php /*  * mysql表结构处理类  * 创建数据表,增加,编辑,删除表中字段  *  */ class MysqlManage{ /*  * 创建数据库,并且主键是aid  * table 要查询的表名  */ function createTable($table){ $sql="CREATE TABLE IF NOT EXISTS `$table` (`aid` INT NOT NULL primary key)ENGINE = InnoDB;"; M()-&g

Mysql数据库理论基础之五--SELECT单多表查询、子查询、别名

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建.这样,表的大小就能超过单独文件的最大容量.表空间可包括原始磁盘分区,从而使得很大的表成为可能

web day16 数据库 完整性约束,mySQL编码问题,备份与恢复,多表查询

约束 * 约束是添加在列上的,用来约束列的! 1. 主键约束(唯一标识) ****非空*** ****唯一*** ****被引用**** * 当表的某一列被指定为主键后,该列就不能为空,不能有重复值出现. * 创建表时指定主键的两种方式: > CREATE TABLE stu( sid      CHAR(6) PRIMARY KEY, sname     VARCHAR(20), age         INT, gender     VARCHAR(10) ); 指定sid列为主键列,即为s

python3 mysql 多表查询

python3 mysql 多表查询 一.准备表 创建二张表: company.employee company.department #建表 create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varchar(20), sex enum('male','female') not null default 'male'