我正在为 Joomla 2.5 开发自定义多商店组件。我知道,这是一项繁重的工作,但我正在努力,目前一切都进展顺利;)
我正在处理 2 个数据库:
- 主数据,包含产品的所有主要信息,具有经典结构(产品、类别、产品类别关系、制造商......)
- 一个从属设备,仅包含本地信息(product_id 和一些自定义内容,例如该特定商店的售价)。
在主数据库或本地数据库上创建查询的过程正常。用于本地数据库的简单 getDbo() 和用于主数据库的 getInstance,数组中带有新参数,例如
$masterdb = & JDatabase::getInstance( $master_options );
但是: 如果我想使用 JOINS 在两个数据库之间进行“交叉查询”怎么办?像:
SELECT *
FROM slave_db.mytable
LEFT JOIN master_db.othertable
ON slave_db.mytable.column_name=master_db.othertable.column_name;
Joomla 框架允许这样做吗?
如果没有,我想我可以编写硬编码的请求,脱离 joomla 的框架方式......但我真的不喜欢这个想法......或者我可以做单独的请求并只在PHP 比较/合并/重组数组......但它也很糟糕!
请帮忙! ;)
最佳答案
好的,这就是我实现这一目标的方法! 虽然有点偷偷摸摸,但确实有效……
// 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);
关于php - Joomla 2.5 - 通过API进行多数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19375381/