1.table多表连接:
语法:select 表1.字段,表2.字段, from 表1 as[别名1],表2 as[别名2] where 表1.字段=表2.字段。这其中就是通过where来进行两个表的关联操作。
代码如下:
public function test()
{
$model=model('User');//实例化模型
$result=$model->table('think_user user,think_role role')- >field(user.*,role.id,role.name)->where(user.id=role.id)->select();
}
其中table中有两个参数:第一个参数是数据表的名称,第二个参数是数据表的别名。
2.join多表连接:
join有下面几种类型:
inner join:内操作,如果表中至少有一个匹配,则返回行,等同于join,
left join:外操作:即使右表无匹配,则从左表中返回所有行,
right join:外操作,即使左表中无匹配,则从右表中返回所有行
full join: 只要其中一个表中存在匹配,就返回行
join主要有三种写法:
写法1:[ ‘完整表名或者子查询’=>’别名’ ]
写法2:’完整表名 别名’
写法3:’不带数据表前缀的表名’
join多表查询默认是inner join,这里说的是left join,代码如下:
$data=Db::name('zhwy_xdrcom')->alias('a')->join('zhwy_member b','a.manage_id = b.id','LEFT')->field("a.*,b.username,b.mobile")->where(['a.delete'=>1])->order(["a.id" => "DESC"])->paginate(15);
3.原生多表查询:
$user = Model('模型名称');
$sql = 'select p.*,q.username from think_test1 as p, think_test2 as q where p.id=q.id order by p.id;
$res = $user->query($sql);