1. 程式人生 > >tp5.1資料表的聯合查詢

tp5.1資料表的聯合查詢

資料表的聯合查詢本質上是找表的交集 先找交集再交叉並集

1 分別找到兩個表  2分別在兩張表裡找打符合join()裡的條件的表,在找到符合where條件裡的表  3兩張表裡的條件交叉並集

Db::name()->alias()->join()->where()->select()

name('table'):第一個集合:表裡的所有資料

join($join,$codition):第二個集合:$join, $condition交集的條件 條件必須得是兩個表的列的比較可以是個陣列

alias('table t')給表起個名字

以$condition為條件在表2中找到符合條件的集合與where()的條件中組成並集

   $permision = Db::name('user_user')->alias('u')->where(['u.id'=>$playerid,'g.type'=>2])->field('g.gold,u.gold')->join('games_lower_limit g','u.integral>g.sliver or u.gold>g.gold')->select();

field(u.gold, g.gold )名字相同的後面一個欄位會替換掉前面一個欄位

總結:每一個條件都視為一個集合,每個集合交集就是聯合查詢的結果,where關聯陣列(['s.grade'=>'60','s.course'=>'english'])

公式:(["key"=>"value","key"=>"value"])所有的鍵值對為and模式

  索引陣列:([  ['u.grade','>','60'] ,  ['u.grade','=','60'] ,  ['u.name','like','wen%']]) 公式:([ ["key","operator","value"] ,... ])所有條件為and模式

上述使用whereOr即可把條件改為or模式

  字串條件("u.grade > 60 and u.name like wen%")