您好,欢迎来到有书房!

MySQL怎么实现跨库join查询

分类:书房文化作者:互联网王者 发布时间:2014-04-29 08:58:08阅读:12万+ 属地:未知

引言:MySQL怎么实现跨库join查询

MySQL怎么实现跨库join查询

一、同节点(服务器)的不同库

只需要在表名前加上db_name

SELECT dba.arb.*,dbb.users.name FROM dba.arb left join dbb.users on dba.arb.id = dbb.users.uid

多表联查时关联的两个字段的排序规则不同会报错,改成相同即可

二、不同节点(服务器)的不同库

1.需要用 FEDERATED引擎

2.建议在程序中去多次请求处理(去join)。

laravel中跨库查询技巧:

1. 跨库查询

# 声明库名和表名即可

$a = \DB::connection('dbcon2')->table('aaa')

            ->where(['id'=>1])->first();

2. 跨库连表查询

跨数据库连接表查询在拼接SQL时,连接库相关必须使用\DB::raw()来声明定义,否则框架会自动在前面添加主库表前缀

$d = AModel::from('table1 as t')

            ->select(['t.id', \DB::raw('o.bbb'), 't.ccc',', \DB::raw('o.ddd as ggg'), \DB::raw('o.vvv')])

            ->leftJoin(\DB::raw('`database2`.`otable` as o'), \DB::raw('o.id'), 't.oId')

            ->where(['t.aaaa'=>'1111',])

            ->paginate(1);


跨库关联查询model的$connection属性能不起作用

我们正常的关联代码是(无法跨库):

public function address() { 

    return $this->belongsTo('Address', 'address_id');

}

跨数据库关联查询:

public function templates() 

    $instance = new Address

    $instance->setTable('db2.address');

    $query =$instance->newQuery(); 

    return new BelongsTo($query,$this,'id','address_id ',null); 

}

声明:本文内容版权归原作者所有,未经授权,禁止转载!

声明:本站仅提供内容存储、展示服务,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的虚假信息,谨防诈骗。如发现有害或侵权内容,可联系本站删除!

发表评论

评论

联系
我们

平台负责人邮箱
282271588@qq.com

关注
公众号

关注官方公众号

下载
安卓版

下载安卓版

回到
顶部