最近开发一个项目牵扯到两个数据库的多张表进行跨库关联查询的问题,特总结如下:
1、跨库联合查询
首先跨库其实是两个问题,即
①跨两个服务器的数据库
②跨同一个服务器的两个数据库
如果是两个服务器的则基本无解,因为这已经超出了联合查询的问题,特别是不是一个mysql的服务器
如果是同一个服务器的不同数据库则原则上还是基于一台mysql服务器引擎,因此是可以做到的
$field[]='((info.price-info.price_chengben)*info.num) as lirun'; $model=Order::getModel('hetong_info')->alias('info') ->leftjoin('order_hetong hetong','hetong.oid=info.order_oid') ->leftjoin('order_yingshou yingshou','hetong.oid=yingshou.ht_oid') ->leftJoin('admin admin_user','admin_user.id=hetong.user_id') ->leftJoin('custom custom','custom.id=hetong.custom_id') ->where('hetong.status','<>',5) ->whereNull('hetong.delete_time'); $model=$model->leftJoin('newcrm.tp_product pro','pro.id=info.pro_id');
如上述代码$model即查询已经配置的默认数据库,最下面的leftjoin则查询数据库为newcrm的tp_product表!
通过上面的说明,我们在遇到问题的时候需要具体的分析,不能直接判断联合查询无法跨库进行操作!
2、拓展思考
如果需要将多个数据库的多个表进行组装,道理跟上述的一样,只要是基于同一个mysql引擎也是可以做到的!