ThinkPHP 经常会遇到多表查询,最近的一个项目就是要同时查询四个表,当然 sql 也要使用多表查询了,只是在 where 的时候有些困难,研究了大半天的时间,终于给搞出来了,好了,先看看 ThinkPHP 中关于 JOIN 多表查询的使用吧,其它查询部分一切照旧。
JOIN方法是连贯操作中唯一可以多次调用的方法
分别查询表artist、work、card 、card
JOIN 有两种方式:LEFT JOIN(默认使用)与RIGHT JOIN
//Left Join
$Model->join(‘work ON artist.id = work.artist_id’)->join(‘card ON artist.card_id = card.id’)->select();
$Model->table(‘user U’)->join(‘news N on U.id=N.cid’)->field(‘U.*,N.*’)->order(‘id desc’)->limit(‘8’)->select();
//Left Join
$Model->table(‘user U’)->join(‘news N on U.id=N.cid’)->field(‘U.*,N.*’)->order(‘id desc’)->limit(‘8’)->select();
//Right Join
$Model->join(‘RIGHT JOIN work ON artist.id = work.artist_id’)->select();
//xiariboke.com
$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 条件:
//Left Join
$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 当作搜索来使用,代码如下:
public function index(){
$model = M(‘sequence_code’);
import(“@.ORG.Page”);
$count = $model->count();
$Page = new Page($count);
if ($_POST[phone]){
$where[‘xn_sequence_code.phone’] = array(‘like’,“%”.$_POST[‘phone’].“%”);
}
$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
$this->page=$Page->show();
$this->display();
}
重点在于 sql 语句的拼接和 where 条件语句,之前我使用的一直是不带表名的 where 语句,导致查询不成功,如果是只有两个表的查询,where 语句不带表前缀是可以的,如果是多表的话就不行,这里有个细微的区别,害得我搞了半天。
声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。导航:艺宵博客 » ThinkPHP关于JOIN使用方法详细说明