提问人:ThomasK 提问时间:12/4/2012 更新时间:12/4/2012 访问量:3851
PHP SQL 将来自不同数据库的多个表联接在一起
php sql join together multiple tables from different databases
问:
我有 3 个数据库,现在我需要将每个数据库中的多个表联接到一个单查询中。我该怎么做?
这是我的联系:
try {
$con_options = array(
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // _SILENT (pub) || _WARNING || _EXCEPTION (dev)
);
$con_1 = new PDO('mysql:host=localhost; dbname=database_1', 'user_1', 'pass_1', $con_options);
$con_2 = new PDO('mysql:host=localhost; dbname=database_2', 'user_2', 'pass_2', $con_options);
$con_3 = new PDO('mysql:host=localhost; dbname=database_3', 'user_3', 'pass_3', $con_options);
} catch (PDOException $err) {
// catch, record/log and do stuff with errors
}
我有 3 个不同的用户,每个数据库都有唯一的密码。 一个数据库存储 facebook 应用程序和其他 iframe 应用程序的应用程序数据。 另一个包含所有网店数据,如产品、订单、客户等,而第三个包含网站结构和内容。
现在;我想以某种方式将他们三个放在一个查询中。JOIN
当我写这个问题时;我得到的一个想法是让另一个“超级”用户访问所有三个数据库,然后只做一个全局多表查询?这是一个可以接受的解决方案吗?
如果是这样,我是否还必须在查询中指定哪个数据库?
答:
5赞
German Rumm
12/4/2012
#1
您将需要一个有权访问所有三个数据库的用户。
您将通过指定完整的表名将它们连接在一起,如下所示:
SELECT * FROM database_1.logs AS d1 LEFT JOIN database_2.users AS d2
ON d1.username = d2.username ORDER BY d1.timestamp DESC LIMIT 10
评论
0赞
vectorialpx
12/4/2012
最后,您不能使用 PHP 或其他语言为三个不同的用户运行 SQL。您必须只有一个连接才能使其正常工作。
1赞
ThomasK
12/4/2012
是的,这就是我写问题时的想法。因此,我创建了一个有权访问所有三个数据库的用户,然后测试了几次,但错误地找不到表或视图。回头看这里,发现我应该在开头使用带有数据库名称的完整表名。我像魅力一样工作......谢谢大家...
评论