# [THINKPHP 中關聯查詢(多表查詢)](https://www.cnblogs.com/qinglin/p/8493514.html)
**THINKPHP 中關聯查詢(多表查詢)可以使用?table()?方法或和join方法,請看示例:**
**1**、Table方法:定義要操作的數據表名稱,可以動態改變當前操作的數據表名稱,需要寫數據表的全名,包含前綴,可以使用別名,例如:
> $Model->Table('think\_user user')
>
> \->where('status>1')
>
> \->select();
>
> $Model->table('think\_blog blog,think\_type type')
> \->where('blog.typeid=type.id')
> \->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();
使用數組方式定義的優勢是可以避免因為表名和關鍵字沖突而出錯的情況。
注:如果不定義table方法,默認會自動獲取當前模型對應或者定義的數據表。
**2**、Join方法:查詢Join支持,Join方法的參數支持字符串和數組,并且join方法是連貫操作中唯一可以多次調用的方法。例如:
> $Model->join('work ON artist.id = work.artist\_id')
>
> \->join('card ON artist.card\_id = card.id')
>
> \->select();
>
> //Left Join
> $Model->table('user U')
>
> \->join('news N on U.id=N.cid')
>
> \->field('U.\*,N.\*')
>
> \->order('id desc')
>
> \->limit('8')
>
> \->findall();
默認采用LEFT JOIN 方式,如果需要用其他的JOIN方式,可以改成
> $Model->join('RIGHT JOIN work ON artist.id = work.artist\_id')
>
> \->select();
>
> //Right Join
> $Model->table('user U')
> \->join(array('right','news N on U.id=N.cid'))
> \->field('U.\*,N.\*')
> \->order('id desc')
> \->limit('8')
> \->findall();
如果join方法的參數用數組的話,只能使用一次join方法,并且不能和字符串方式混合使用。
> $Model->join(array(' work ON artist.id = work.artist\_id', 'card ON artist.card\_id = card.id'))
>
> \->select()
運用這種連貫操作方法,可以有效的提高數據查詢的代碼清晰度和開發效率。
查看連貫操作的SQL語句的方法:
> echo $Model->getLastSql(); //打印一下SQL語句,查看一下
例2:
1、table()
$list = $user->table('user\_status stats, user\_profile profile')->where('stats.id = profile.typeid')->field('stats.id as id, stats.display as display, profile.title as title,profile.content as content')->order('stats.id desc' )->select();
2.1、join()2表查詢
$user = new Model('user');
$list = $user->join('RIGHT JOIN user\_profile ON user\_stats.id = user\_profile.typeid' );
2.2、join() 多表查詢
? ? ? ? $list = $Form->join('think\_sort ON think\_form.sort\_id = think\_sort.sort\_id' )->join('think\_brand ON think\_form.brand\_id = think\_brand.brand\_id' )->select();
**3**、原生查詢
$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->listRows;
$voList = $Model->query($sql);