join

JOIN 通常有下面几种类型,不同类型的 JOIN 操作会影响返回的数据结果。

  • INNER JOIN:等同于 JOIN(默认),如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,就返回行

join 方法说明:

  1. function join( $join [, $condition = '' [, $type = 'INNER']] )

join 方法也是链式操作之一,用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

参数

  • join 关联

    支持两种类型:字符串、数组

  • condition 条件

    join 为数组时自动忽略。

    支持两种类型:字符串、数组

  • type 关联类型

    join 为数组时自动忽略。

    可以为:INNER (默认)、LEFT、RIGHT、FULL,不区分大小写。

举例,以下三种写法的效果一样

  1. $select = array(
  2. array('work', 'id'),
  3. array('artist', 'artist_id'),
  4. );
  5. Db::table('artist')
  6. ->join('work', 'artist.id = work.artist_id')
  7. ->select($select);
  8. $join = array('artist.id', '=', 'work.artist_id');
  9. Db::table('artist')
  10. ->join($join)
  11. ->select($select);
  12. $join = array('work', 'artist.id = work.artist_id', 'RIGHT');
  13. Db::table('artist')
  14. ->join($join)
  15. ->select($select);

如果要关联多个表,可以这样写:

  1. $join = array(
  2. array('work', 'artist.id = work.artist_id', 'LEFT'),
  3. array('card', 'card.id = work.card_id', 'LEFT'),
  4. );
  5. Db::table('artist')
  6. ->join($join)
  7. ->select($select);

默认采用 INNER JOIN 方式,如果需要用其他的 JOIN 方式,可以改成

  1. Db::table('artist')
  2. ->join('work', 'artist.id = work.artist_id', 'RIGHT')
  3. ->select($select);
  4. $join = array('artist.id', '=', 'work.artist_id', 'RIGHT');
  5. Db::table('artist')
  6. ->join($join)
  7. ->select($select);