tp5怎么写oracle三表关联查询的语句并去重

tp 5怎么使用三表联查? - ThinkPHP框架
需要写一个tp的三表联查效果,但是手册里只有2表联查实例,例如:Db::table('think_artist')
-&alias('a')
-&join('think_work&w','a.id&=&w.artist_id')
-&join('think_card&c','a.card_id&=&c.id')
-&select();上面是‘think_artist’重命名a以后内联‘think_work’表(重命名w),下面的是c表和a表的内联,但我要三表联查要怎么做?就好比查a-w-c表存在的数据。
linzhifen5
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。1.命名规则 &&get + 属性名的驼峰命名+ Attr& & & ------&在相应的model中创建方法
<span style="color: # protected function getSexAttr($value) {
<span style="color: #     $text = [1 =& '男', 2 =& '女', 3 =& '保密'];
<span style="color: #     return $text[$value];
<span style="color: #   }
此情景下user表里是存在sex字段的,sex的值为1,2,3三种情况。这个获取器的作用在于,后台获取user表的list后,sex值仍为1,2,3。前台循环调用的时候就可以用{volist name="list" id="v" key="k"}{$v.sex}{/volist} 此时的{$v.sex}就对应成男,女,未知。
2.针对前台需要用到sex值1,2,3同时也要用到文本值男,女,未知的时候,这个获取器就有局限性了,此时,小伙伴们很容易想到,定义两个获取器,一个存1,2,3另一个存男,女,未知。ok,这个方法是可行的,在这里简单介绍一下我想到的方法,定义一个获取器存二维数组。
protected function getSexAttr($value) {
    $text = [1 =& '男', 2 =& '女', 3 =& '未知'];
    return ['val' =& $value, 'text' =& $text[$value]];
  这种情况下,前台就可以直接使用了{$v.sex.val}是1,2,3值的格式。{$v.sex.text}就是男,女,未知的格式。
  看到这里,相信小伙伴们已经蠢蠢欲动了吧,这还不止呢,接下来介绍一下,定义不存在的字段,映射其他表的字段。就可以应用到项目中了。
  3.关联其他表的字段构建user表里不存在的字段,其他表就以info表为例吧
protected function getHosNameAttr($value, $data) {
    $name = model('Info')-&where('info_id', $data['id'])-&value('hos_name');
    return $name;
  在user表里构造了hos_name字段,这个例子很简单,user表的主键id是info表的外键info_id,通过这个关系就可以将info里的字段映射到user表里,在后台只查询user表的数据就能用hos_name了,可以省去两表联合查询
  4.如果又需要用到值,又需要用到文本的情况,就可以用第二个例子的思路了。
protected function getArchivesAttr($value, $data) {
    $archiveid = model('Info')-&where('info_id', $data['id'])-&value('archives_id');
    $archivename = model('Archives')-&where('id', $archiveid)-&value('name');
    return ['val' =& $archiveid, 'text' =& $archivename];
  此示例,在user表里构建了archives字段,val存的是info表的archives_id字段,text是archives_id对应的在表archives里的name字段。省去了三表联合查询,这样在后台只需要查询user表就可以在前台调用archives字段了。
本文并非原创
参考:& & & & & 作者:dreamfly_cc
阅读(...) 评论()$schoolstation_rs=Db::name('school')
-&field('a.id,a.title,b.sid,b.price')
-&alias('a')
-&join('schoolstation b','a.id = b.sid')
-&where('a.pid',$rs['sid'])
-&where('a.flid',2)
-&select();
$this-&assign('schoolstation_rs',$schoolstation_rs);模板
&div class="layui-form-item"&
{volist name="schoolstation_rs" id="schoolstation"}
&div class="layui-inline"&
&label class="layui-form-label"&{$schoolstation.title}&/label&
&div class="layui-input-inline"&
&input type="hidden" name="sid2[]" value="{$schoolstation.id}"&
&input name="price[]" lay-verify="required" autocomplete="off" class="layui-input" type="text" value="{$schoolstation.price}"&
&/div&官方教程:https://www.kancloud.cn/manual/thinkphp5/118077https://www.kancloud.cn/manual/thinkphp5/118083
tp5数据库的多表互联查询
TP的多表查询+分页范例
TP5 一对多关联查询
没有更多推荐了,

我要回帖

更多关于 三表查询sql语句 的文章

 

随机推荐