【问题标题】:php sql join together multiple tables from different databasesphp sql将来自不同数据库的多个表连接在一起
【发布时间】:2012-11-22 02:30:27
【问题描述】:

我有 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-apps 和其他 iframe 应用程序的应用程序数据。 另一个保存所有网店数据,如产品、订单、客户等,而第三个保存网站结构和内容。

现在;我想以某种方式将JOIN 他们三个一起放在一个查询中。

在我写这个问题的时候;我得到的一个想法是让另一个“超级”用户可以访问所有三个数据库,然后进行常规多表查询?这是一个可以接受的解决方案吗?

如果是这样,我是否必须在查询中指定哪个数据库?

【问题讨论】:

    标签: php mysql sql join pdo


    【解决方案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
    

    【讨论】:

    • 作为补全,您不能使用 PHP 或其他语言为三个不同的用户运行 SQL。您必须只有一个连接才能使其正常工作。
    • 是的,这就是我在写问题时的想法。所以我创建了一个可以访问所有三个数据库的用户,然后测试了几次关于找不到表或视图的错误。回到这里,发现我应该在开头使用完整的表名和数据库名。我的工作就像一个魅力......谢谢大家......
    猜你喜欢
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 2014-10-05
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多