ThinkPHP关于JOIN使用方法详细说明

 ThinkPHP 经常会遇到多表查询,最近的一个项目就是要同时查询四个表,当然 sql 也要使用多表查询了,只是在 where 的时候有些困难,研究了大半天的时间,终于给搞出来了,好了,先看看 ThinkPHP 中关于 JOIN 多表查询的使用吧,其它查询部分一切照旧。

JOIN方法是连贯操作中唯一可以多次调用的方法

分别查询表artist、work、card 、card

JOIN 有两种方式:LEFT JOIN(默认使用)与RIGHT JOIN

 
  1. //Left Join  
  2. $Model->join('work ON artist.id = work.artist_id')->join('card ON artist.card_id = card.id')->select();   
  3.   
  4.   
  5. $Model->table('user U')->join('news N on U.id=N.cid')->field('U.*,N.*')->order('id desc')->limit('8')->select();  
  6.   
  7. //Left Join  
  8. $Model->table('user U')->join('news N on U.id=N.cid')->field('U.*,N.*')->order('id desc')->limit('8')->select();  
  9.   
  10. //Right Join  
  11. $Model->join('RIGHT JOIN work ON artist.id = work.artist_id')->select();   
  12. //dxpang.com  
  13. $Model->table('user U')->join(array('right','news N on U.id=N.cid'))->field('U.*,N.*')->order('id desc')->limit('8')->select();  

在写好 JOIN 之后,在使用 where 的时候,要指定表名,例如 where 条件:

 
  1. //Left Join  
  2. $Model->join('work ON artist.id = work.artist_id')->join('card ON artist.card_id = card.id')->wehre("artist.card_id =10")->select();   

再来分享我写的一个 ThinkPHP 查询方法,可以当作正常的列表来使用,也可以直接 post 当作搜索来使用,代码如下:

 
  1. public function index(){  
  2.       
  3.     $model = M('sequence_code');  
  4.   
  5.     import("@.ORG.Page");   
  6.     $count  = $model->count();     
  7.     $Page   = new Page($count);  
  8.   
  9.     if ($_POST[phone]){  
  10.         $where['xn_sequence_code.phone'] = array('like',"%".$_POST['phone']."%");  
  11.     }  
  12.      
  13.     $this->list = $model->where($where)->field('xn_sequence_code.id,xn_sequence_code.scode,xn_sequence_code.phone,xn_sequence_code.is_use,xn_sequence_code.use_date,xn_demand.title,xn_insurance_deepconfig.gradename,xn_member.nickname')->join('left join xn_demand on xn_demand.id=xn_sequence_code.type_id left join xn_insurance_deepconfig on xn_insurance_deepconfig.id=xn_sequence_code.grade_id left join xn_member on xn_member.mobile=xn_sequence_code.phone')->limit($Page->firstRow. ',' . $Page->listRows)->order('xn_sequence_code.id desc')->select(); //dxpang.com  
  14.      
  15.     $this->page=$Page->show();  
  16.   
  17.  $this->display();  
  18.  }  

重点在于 sql 语句的拼接和 where 条件语句,之前我使用的一直是不带表名的 where 语句,导致查询不成功,如果是只有两个表的查询,where 语句不带表前缀是可以的,如果是多表的话就不行,这里有个细微的区别,害得我搞了半天。

扫一扫手机访问