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. $Model->table(‘user U’)->join(‘news N on U.id=N.cid’)->field(‘U.*,N.*’)->order(‘id desc’)->limit(‘8’)->select();
  4. //Left Join
  5. $Model->table(‘user U’)->join(‘news N on U.id=N.cid’)->field(‘U.*,N.*’)->order(‘id desc’)->limit(‘8’)->select();
  6. //Right Join
  7. $Model->join(‘RIGHT JOIN work ON artist.id = work.artist_id’)->select();
  8. //xiariboke.com
  9. $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.     $model = M(‘sequence_code’);
  3.     import(“@.ORG.Page”);
  4.     $count  = $model->count();
  5.     $Page   = new Page($count);
  6.     if ($_POST[phone]){
  7.         $where[‘xn_sequence_code.phone’] = array(‘like’,“%”.$_POST[‘phone’].“%”);
  8.     }
  9.     $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(); //xiariboke.com
  10.     $this->page=$Page->show();
  11.  $this->display();
  12.  }

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

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.com/procedure/656.html

发表评论

登录后才能评论