【问题标题】:Joomla 2.5 - Multiple databases query through APIJoomla 2.5 - 通过 API 查询多个数据库
【发布时间】:2013-10-22 21:54:11
【问题描述】:

我正在为 Joomla 2.5 开发一个自定义的多商店组件。我知道,这是很多工作,但我正在努力,目前一切都很好;)

我正在处理 2 个数据库:

  • 一个master,包含产品的所有主要信息,具有经典结构(产品、类别、产品-类别关系、制造商......)
  • 一个奴隶,它只包含本地信息(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 比较/合并/重组数组……但它也很烂!

请帮忙! ;)

【问题讨论】:

  • 恐怕是 Joomla!没有核心解决方案。您需要扩展 DBO 或使用普通 PHP 编写自己的外部查询。

标签: php mysql database join joomla


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2015-04-28
    相关资源
    最近更新 更多