thinkphp查詢多個數據的方法:1、使用Table方法進行多表查詢,語法如“$Model->table(‘think_blog blog,think_type type’)”;2、使用Join方法進行查詢,代碼如“$Model->join(‘work ON artist.id = work.artist_id’)”。
本教程操作環境:Windows7系統、ThinkPHP5版、Dell G3電腦。
thinkphp怎么查詢多個數據?
THINKPHP 中關聯查詢(多表查詢)
THINKPHP 中關聯查詢(多表查詢)可以使用 table() 方法或和join方法,請看示例:
立即學習“PHP免費學習筆記(深入)”;
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);
推薦學習:《thinkPHP視頻教程》