作者:lk神密勇士 | 来源:互联网 | 2013-08-07 16:46
THINKPHP中关联查询(多表查询)可以使用表()方法或和连接方法,请看示例:
1、Table方法:定义要操作的数据表名称,可以动态改变当前操作的数据表名称,需要写数据表的全名,包含前缀,可以使用别名,例如:
型号 - >表('think_user用户)
- >在哪里('状态> 1')
- >选择();
型号- >的表(think_blog博客,think_type型)
- >在哪里('blog.typeid = type.id')
- >字段('blog.id为ID,blog.title的blog.content,type.typename类型')
- >订单('blog.id DESC')
- >限制(5)
- >选择();
表方法的参数支持字符串和数组,数组方式的用法:
型号 - >表(阵列('think_user'=>'用户','think_group'=>'组'))
- >在哪里('状态> 1')
- >选择();
使用数组方式定义的优势是可以避免因为表名和关键字冲突而出错的情况。
注:如果不定义table方法,默认会自动获取当前模型对应或者定义的数据表。
2、Join方法:查询Join支持,Join方法的参数支持字符串和数组,并且join方法是连贯操作中唯一可以多次调用的方法。例如:
型号 - >加入('工作,ON artist.id = work.artist_id')
- >“加入(”卡ON artist.card_id = card.id“)
- >选择();
/ / LEFT JOIN
型号- >表(用户U')
- >连接(新闻N上U.id = N.cid)
- >字段('U. * N. *')
- >命令(ID DESC')
- >限制('8')
- >的findall();
默认采用LEFT JOIN方式,如果需要用其他的加盟方式,可以改成
型号 - >加入(RIGHT JOIN工作ON artist.id = work.artist_id')
- >选择();
/ / RIGHT JOIN
型号- >表('用户U')
- >加盟(阵列('右','新闻N上U.id = N.cid))
- >字段(U. * N. *')
- >命令(ID DESC')
- >限制('8')
- >的findall();
如果join方法的参数用数组的话,只能使用一次join方法,并且不能和字符串方式混合使用。
模型加盟(阵列(“工作,ON artist.id = work.artist_id','卡,ON artist.card_id = card.id'))
- >选择()
运用这种连贯操作方法,可以有效的提高数据查询的代码清晰度和开发效率。
查看连贯操作的SQL语句的方法:
回声$型号 - > getLastSql()/ /打印一下SQL语句,查看一下
例2:
1,表中()
$名单= $('user_status统计,user_profile资料)用户>表 - >其中('stats.id = profile.typeid') - >字段('显示,轮廓作为ID,stats.display的stats.id。标题作为标题,内容的profile.content“) - >命令('stats.id DESC') - >选择();
2.1,加入(2)表查询
$用户=新模式(“用户”);
$名单= $用户 - >加入('RIGHT JOIN user_profile的ON user_stats.id = user_profile.typeid');
2.2,加入()多表查询
列表= $表 - >连接('ON think_form.sort_id = think_sort.sort_id think_sort“) - >连接('ON think_form.brand_id = think_brand.brand_id think_brand”) - >选择();
3,原生查询
型号新型号();
$ SQL ='选择a.id,a.title,从think_test1 b.content作为think_test2为b a.id = b.id'的$地图“。为了a.id'。排序。' 限制'$ P-> firstRow。','$ P-> ListRows设为
$ voList = $型号- >查询(SQL);