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方法,請看範例:
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影片教學》
以上是thinkphp怎麼查詢多個數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!