zoukankan      html  css  js  c++  java
  • thinkphp5 left join

    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();
    

    以上三种写法的效果一样,__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返回的语句带有(),所以这里不需要在两端再加上()。

  • 相关阅读:
    python_Memcached
    python_day10_IO多路复用
    java_list,set,map集合
    python3.0_day9_scoket基础之篇
    redis.conf配置文件详解
    Java_数组
    面向接口编程初识(转)
    SSH三种框架及表示层、业务层和持久层的理解(转)
    解决win10磁盘占用过大的问题(亲测有效)
    ORA-12541:TNS:无监听程序
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8991048.html
Copyright © 2011-2022 走看看