在drupal中可以进行跨数据库连接吗?
假设您有两个数据库,drupal和old_data_source。您想要将drupal.node加入到old_data_source.page。
可以调用db_set_active()来使用多个数据库。然而,我找不到任何关于跨数据库表连接的东西!
(我正在将此作为迁移脚本的一部分进行研究,并将删除old_data_source)
发布于 2010-08-05 20:05:16
Drupal不支持同时拥有多个活动数据库。主要原因可能是这是mysql特有的特性。
您可以使用php完成此操作,并跳过Drupal数据库层。因为它只适用于应该运行一次的迁移脚本,所以将代码数据库指定为特定的就可以了。结束使用db_set_active可能是个好主意,只需使用mysql_ connect等
发布于 2012-03-19 23:18:50
有一个鲜为人知的技巧可以实现这一点,它依赖于一种称为表前缀的功能。您可以将settings.php配置为在查询中为某些表加上另一个数据库的名称作为前缀,这样您就可以进行跨数据库联接。
请看default.settings.php注释中的示例(类似的语法在Drupal6中适用),以了解如何设置它。在原始问题的情况下,默认$databases条目上有一个前缀数组,如下所示:
'prefix' => array('page' => 'old_data_source.'),然后构建一个查询,如下所示:
db_query("SELECT * FROM {node} n LEFT JOIN {page} p on n.nid=p.nid");Drupal DB抽象层将解释{page}并将其转换为SQL,如下所示:
SELECT * FROM node n LEFT JOIN old_data_source.page p on n.nid=p.nid;唯一需要确保的是与默认Drupal数据库相关联的数据库用户是否拥有访问这两个数据库的权限,否则这个技巧将不起作用。
发布于 2013-08-07 02:43:58
我只想补充这个答案,因为我最近也遇到了这个问题。到目前为止(在我的例子中)最简单的解决方案是创建一个mysql view,它在后台执行连接。这就消除了在drupal本身中进行跨数据库连接的需要。
https://stackoverflow.com/questions/3414295
复制相似问题