转载]ThinkPHP的多表查询

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语句,查看一下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值