同时连接并搜索多个数据失败

我有2个数据库,一个数据库记录2012年8月以前的数据,一个数据库记录2012年9月至今的数据库,分别是DB和DB2吧。

我希望查询的时候可以同时查询2个数据库,获得数据。

上网查了些资料,修改了CAR,但发现查询数据的时候不能查询DB,只查询了DB2的数据。

有没有其他方法呢?


<?php 

class MyActiveRecord extends CActiveRecord

{

	public function getDbConnection()

	{

		if (self::$db!==null)

		{

			return self::$db;

		}else{

			self::$db=Yii::app()->getComponent('db2');

			if (self::$db instanceof CDbConnection)

			{

				return self::$db;

			}else {

				throw new CDbException(Yii::t('yii', 'Active Record requires a "db2" CDbConnection application component.'));

			}

		}

	}

}




?>

复杂查询 就不要用ar了 一个是效率问题 还有一个就是构造查询条件也不方便 可以用原生sql通过dao来做

ar很适合增删改 ; 你的还涉及到多库 yii也只是php框架而已 你只要是能用php解决的yii也可以 反之一般也大都如此 所以当你不熟悉yii的某些特殊用法 可以看看php是否从底层能够解决 先有思路在看yii是否有既有方案 你先思考如何用原始php和pdo如何解决 :lol:

你这个不是单纯切换数据库链接的问题 是分库问题 一次解决不了可以分步骤解决 可以用两个ar (继承就行) 其中一个使用另一个链接

或者 先查一个库 然后做下库切换

$rs1 = SomeModel::model()->findAll($yourCriteria);

SomeModel::$db = Yii::app()->db2 ;// 动态切换掉默认的db

$rs2 = SomeModel::model()->findAll($yourCriteria);

然后合并处理 两次查询的结果集

一旦分库 有些sql的特性就不能用了 比如 聚合 排序 join… 这需要类似 map/reduce 样的处理 比如求最大最小值问题 你必须分别处理然后归并再求…

很感谢你的帮助,我明白我该怎么做了,谢谢