我正在为Joomla 2.5开发一个自定义的多主机组件。我知道,这是一项很多工作,但是我已经开始工作了,目前一切都很顺利;)
我正在处理2个数据库:
在主服务器或本地数据库上创建查询的过程是可以的。一个简单的getDbo()用于本地数据库,一个getInstance用于主数据库,在数组中有新的参数,如
$masterdb = & JDatabase::getInstance( $master_options );
但是: 如果我想用JOINS在两个dbs之间进行“交叉查询”怎么办?喜欢:
SELECT *
FROM slave_db.mytable
LEFT JOIN master_db.othertable
ON slave_db.mytable.column_name=master_db.othertable.column_name;
Joomla的框架是否允许这样做?
如果没有,我想我可以用joomla的框架方式编写硬编码请求......但我真的不喜欢这个想法...或者我可以单独请求并且只能在PHP来比较/合并/重新组织数组......但它也很糟糕!
请帮忙! ;)
答案 0 :(得分:1)
好的,这就是我实现这一目标的方式! 这有点偷偷摸摸,但它确实有效......
// For Master DB calls.
$master_options['driver'] = MASTER_DRIVER;
$master_options['host'] = MASTER_HOST;
$master_options['user'] = MASTER_USER;
$master_options['password'] = MASTER_PASSWORD;
$master_options['database'] = MASTER_DB;
$master_options['prefix'] = MASTER_PREFIX;
$masterdb = JDatabase::getInstance( $master_options );
$query = $masterdb->getQuery(true);
//slave infos
$app = JFactory::getApplication();
$slave_prefix = $app->getCfg('dbprefix');
$slave_name = $app->getCfg('db');
$query = "SELECT *
FROM `".$slave_name."`.`".$slave_prefix."mytable`
LEFT JOIN `".$master_options['database']."`.`".$master_options['prefix']."othertable`
ON `".$slave_name."`.`".$slave_prefix."mytable`.`column_name`=`".$master_options['database']."`.`".$master_options['prefix']."othertable`.`column_name`";
$masterdb->setQuery((string)$query);