天天看點

thinkphp 3.2 完全開發手冊位址

http://document.thinkphp.cn/manual_3_2.html

JOIN  查詢應用

JOIN方法也是連貫操作方法之一,用于根據兩個或多個表中的列之間的關系,從這些表中查詢資料。

join通常有下面幾種類型,不同類型的join操作會影響傳回的資料結果。

  • INNER JOIN: 如果表中有至少一個比對,則傳回行,等同于 JOIN
  • LEFT JOIN: 即使右表中沒有比對,也從左表傳回所有的行
  • RIGHT JOIN: 即使左表中沒有比對,也從右表傳回所有的行
  • FULL JOIN: 隻要其中一個表中存在比對,就傳回行

join方法可以支援以上四種類型,例如:

  1. $Model = M('Artist');

  2. $Model

  3. ->join('think_work ON think_artist.id = think_work.artist_id')

  4. ->join('think_card ON think_artist.card_id = think_card.id')

  5. ->select();

join方法支援多次調用,但指定的資料表必須是全稱,但我們可以這樣來定義:

  1. $Model

  2. ->join('__WORK__ ON __ARTIST__.id = __WORK__.artist_id')

  3. ->join('__CARD__ ON __ARTIST__.card_id = __CARD__.id')

  4. ->select();

__WORK__

__CARD__

在最終解析的時候會轉換為

think_work

think_card

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

  1. $Model->join('RIGHT JOIN __WORK__ ON __ARTIST__.id = __WORK__.artist_id')->select();

或者使用:

  1. $Model->join('__WORK__ ON __ARTIST__.id = __WORK__.artist_id','RIGHT')->select();

join方法的第二個參數支援的類型包括:INNER LEFT RIGHT FULL。

如果join方法的參數用數組的話,隻能使用一次join方法,并且不能和字元串方式混合使用。 例如:

  1. join(array(' __WORK__ ON __ARTIST__.id = __WORK__.artist_id','__CARD__ ON __ARTIST__.card_id = __CARD__.id'))

使用數組方式的情況下,第二個參數無效。是以必須在字元串中顯式定義join類型,例如:

  1. join(array(' LEFT JOIN __WORK__ ON __ARTIST__.id = __WORK__.artist_id','RIGHT JOIN __CARD__ ON __ARTIST__.card_id = __CARD__.id'))