注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

背归鸿

博闻强记,厚积薄发!

 
 
 

日志

 
 

ThinkPHP的多表查询  

2012-03-04 10:03:14|  分类: php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。
数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
1、Table方法:定义要操作的数据表名称,可以动态改变当前操作的数据表名称,需要写数据表的全名,包含前缀,可以使用别名,例如:

$Model->Table('think_user user')

->where('status>1')

->select();


$Model->table('think_blog blog,think_type type')
->where('blog.typeid=type.id and blog.status > 1')
->field('blog.id as id,blog.title,blog.content,type.typename as type')
->order('blog.id desc' )
->limit(5)
->select();

Table方法的参数支持字符串和数组,数组方式的用法:

$Model->Table(array('think_user'=>'user','think_group'=>'group'))

->where('status>1')

->select();

使用数组方式定义的优势是可以避免因为表名和关键字冲突而出错的情况。

2、如果要用到 in 和 not in ,则要把数组处理成 (1,2,3,4,5) 这种形式

$hadpid =  M('StudentProject')->where($map)->getField('spid,pid');
$pidarray = '('.implode(',', $hadpid).')';
$pro = M('StudentProject')->table('rf_project project,rf_student_project spro')
->where('project.pid in '.$pidarray.' and project.pid = spro.pid')
->field('project.pnumber,project.pname,project.username,spro.stime,spro.endtime')
->order('spid desc')
->select();

当然,多表查询还有join方法,下篇我们再详细介绍

3、关于$map

$map['goods.create_time']    =    array('gt',$_GET['create_time']);
$map['shop.site_identify']    =    $_GET['site_identify'];
$map['goods.status']    =    1;
$map['_string']    =    'goods.shop_id = shop.id';
$goodsList = M("Goods")->table('bs_goods goods,bs_shop shop')->where($map)->limit(20)->select();

  评论这张
 
阅读(3449)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018