Ann*_*nan 1 php database-abstraction drupal join
是否可以在drupal中进行跨数据库联接?
假设您有两个数据库,drupal和old_data_source。你想加入drupal.node到old_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数据库关联的数据库用户具有访问这两个数据库的特权,否则此技巧将不起作用。
| 归档时间: |
|
| 查看次数: |
1467 次 |
| 最近记录: |