ThinkPHP3.2 join 用法详解联合查询

∫`不撒娇的折耳猫 2020-3-31 2910

inner join  如果表中至少 有一个匹配,在则返回行,等同与 join 。

left    join  即使 有右表中没有匹配 ,也从左表中返回所有的行。

right join  即使左表中没有匹配,也从右表中返回所有的行。

full    join  只要其中一个表中匹配,就返回行。

Tp语句实例:

 $count = $this->orderModel 
     ->join('left join __ORDER__ as o on t.order_id = o.third_order_id  and t.source = o.source')
     ->where($map)
     ->count();
 import('Org.Util.Page');
 $page = new Page($count, 10);
 $lists = $this->orderModel
     ->alias('t')
     ->field('t.*,o.order_id as ccsid')
      ->join('left join __ORDER__ as o on t.order_id = o.third_order_id  and t.source = o.source')
      ->where($map)
      ->order("create_time DESC")
      ->limit($page->firstRow . ',' . $page->listRows)
      ->select();

Tp语法注释:

$lists = $this->orderModel              // M('third_order');
    ->alias('t')                        // 别名
    ->field('t.*,o.order_id as ccsid')  // 要查的字段
    ->join('left join __ORDER__ as o on t.order_id = o.third_order_id  and t.source = o.source')
    //关联表(左链接  order表 as o 别名  on关系 t.xx = o.xxx          and  t.xxx  =  o.xxx  )
    ->where($map)                       // 条件
    ->order("create_time DESC")         // 排序
    ->limit($page->firstRow . ',' . $page->listRows)  // 取几条
    ->select();

解析的sql 语句为:

 SELECT    t.*,o.order_id as ccsid 
     FROM    db_third_order t 
     left join   db_order as o 
     on  t.order_id = o.third_order_id and t.source = o.source 
     WHERE   t.status <> 0 
     ORDER BY  create_time DESC 
     LIMIT     0,20

原生sql注释 :

select 表名(别名).* , 表名(别名). 字段 as 别名
from 主表 空格 别名(t)
left join 从表 as 别名 (o)
on   t.xxx = o.xxx   and   t.xxx = o.xxx   <表关系>
where  条件  
order by  字段名 desc   倒叙
limit  0,20


最新回复 (0)
发新帖