跨数据库表加入Drupal?

Ann*_*nan 1 php database-abstraction drupal join

是否可以在drupal中进行跨数据库联接?

假设您有两个数据库,drupalold_data_source。你想加入drupal.nodeold_data_source.page

db_set_active()可以调用以使用多个数据库。但是找不到关于跨数据库表联接的任何信息!

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

小智 5

有一个鲜为人知的技巧可以完成此任务,它依赖于称为表前缀的功能。您可以将settings.php配置为使用其他数据库的名称为查询中的某些表添加前缀,以便进行跨数据库联接。

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

'prefix' => array('page' => 'old_data_source.'),
Run Code Online (Sandbox Code Playgroud)

然后使用类似以下内容的查询:

db_query("SELECT * FROM {node} n LEFT JOIN {page} p on n.nid=p.nid");
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM node n LEFT JOIN old_data_source.page p on n.nid=p.nid;
Run Code Online (Sandbox Code Playgroud)

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