thinkphp5leftjoin
thinkphp5 left join
⼀、总结
1、作⽤:left join就是即使不匹配也返回左表中的数据
2、join使⽤通式:object join ( mixed join [, mixed $condition = null [, string $type = 'INNER']] )
弄懂这句话⾥⾯的三个参数及两个中括号的意思
第⼀个参数:mixed join 混合加⼊的表
第⼆个参数:mixed $condition = null 两个表mixed时候的条件,有默认值null,这个估计是在设置了外键之后可以省略这个参数第三个参数:string $type = 'INNER' mixed时候的类型,有默认值INNER,
第⼀个中括号:第⼆三个参数都可以省略
第⼆个中括号:第三个参数可以省略
3、其它类型join实例:Db::table('think_user')->alias('a')->join('word w','a.id = w.artist_id','RIGHT')->select();
⼆、thinkphp5 join
join通常有下⾯⼏种类型,不同类型的join操作会影响返回的数据结果。
INNER JOIN: 等同于 JOIN(默认的JOIN类型),如果表中有⾄少⼀个匹配,则返回⾏
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的⾏
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的⾏
FULL JOIN: 只要其中⼀个表中存在匹配,就返回⾏
说明
object join ( mixed join [, mixed $condition = null [, string $type = 'INNER']] )
JOIN⽅法也是连贯操作⽅法之⼀,⽤于根据两个或多个表中的列之间的关系,从这些表中查询数据。
参数
join
要关联的(完整)表名以及别名
⽀持三种写法:
写法1:[ '完整表名或者⼦查询'=>'别名' ]
写法2:'完整表名别名'
写法3:'不带数据表前缀的表名'
condition
关联条件。可以为字符串或数组,为数组时每⼀个元素都是⼀个关联条件。
type
关联类型。可以为:INNER、LEFT、RIGHT、FULL,不区分⼤⼩写,默认为INNER。
返回值
模型对象
举例
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();
Db::table('think_artist')
->alias('a')
->join('__WORK__ w','a.id = w.artist_id')
->join('__CARD__ c','a.card_id = c.id')
-
>select();
$join = [
['think_work w','a.id=w.artist_id'],
['think_card c','a.card_id=c.id'],
];
Db::table('think_user')->alias('a')->join($join)->select();
多表left join以上三种写法的效果⼀样,__WORK__和__CARD__在最终解析的时候会转换为think_work和think_card。注意:'_表名_'这种⽅式中间的表名需要⽤⼤写
如果不想使⽤别名,后⾯的条件就要使⽤表全名,可以使⽤下⾯这种⽅式
Db::table('think_user')->join('__WORK__','__ARTIST__.id = __WORK__.artist_id')->select();
默认采⽤INNER JOIN ⽅式,如果需要⽤其他的JOIN⽅式,可以改成
Db::table('think_user')->alias('a')->join('word w','a.id = w.artist_id','RIGHT')->select();
表名也可以是⼀个⼦查询
$subsql = Db::table('think_work')->where(['status'=>1])->field('artist_id,count(id) count')->group('artist_id')->buildSql();
Db::table('think_user')->alias('a')->join([$subsql=> 'w'], 'a.artist_id = w.artist_id')->select();
因buildSql返回的语句带有(),所以这⾥不需要在两端再加上()。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论