首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Drupal中的跨数据库表连接?

问Drupal中的跨数据库表连接?
EN

Stack Overflow用户
提问于 2010-08-05 19:41:25
回答 4查看 1.5K关注 0票数 1

在drupal中可以进行跨数据库连接吗?

假设您有两个数据库,drupal和old_data_source。您想要将drupal.node加入到old_data_source.page。

可以调用db_set_active()来使用多个数据库。然而,我找不到任何关于跨数据库表连接的东西!

(我正在将此作为迁移脚本的一部分进行研究,并将删除old_data_source)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-05 20:05:16

Drupal不支持同时拥有多个活动数据库。主要原因可能是这是mysql特有的特性。

您可以使用php完成此操作,并跳过Drupal数据库层。因为它只适用于应该运行一次的迁移脚本,所以将代码数据库指定为特定的就可以了。结束使用db_set_active可能是个好主意,只需使用mysql_ connect等

票数 1
EN

Stack Overflow用户

发布于 2012-03-19 23:18:50

有一个鲜为人知的技巧可以实现这一点,它依赖于一种称为表前缀的功能。您可以将settings.php配置为在查询中为某些表加上另一个数据库的名称作为前缀,这样您就可以进行跨数据库联接。

请看default.settings.php注释中的示例(类似的语法在Drupal6中适用),以了解如何设置它。在原始问题的情况下,默认$databases条目上有一个前缀数组,如下所示:

代码语言:javascript
复制
'prefix' => array('page' => 'old_data_source.'),

然后构建一个查询,如下所示:

代码语言:javascript
复制
db_query("SELECT * FROM {node} n LEFT JOIN {page} p on n.nid=p.nid");

Drupal DB抽象层将解释{page}并将其转换为SQL,如下所示:

代码语言:javascript
复制
SELECT * FROM node n LEFT JOIN old_data_source.page p on n.nid=p.nid;

唯一需要确保的是与默认Drupal数据库相关联的数据库用户是否拥有访问这两个数据库的权限,否则这个技巧将不起作用。

票数 5
EN

Stack Overflow用户

发布于 2013-08-07 02:43:58

我只想补充这个答案,因为我最近也遇到了这个问题。到目前为止(在我的例子中)最简单的解决方案是创建一个mysql view,它在后台执行连接。这就消除了在drupal本身中进行跨数据库连接的需要。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3414295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档