一尘不染

如何在PHP中构造跨数据库查询?

mysql

在上一集中(如何在MySQL中构建跨数据库查询),我学习了如何在MySQL中构建跨数据库查询。这很好用,但是当我们的英雄尝试在PHP中使用这种新发现的知识时,他发现了他最好的朋友FAIL在等他。

我看了看mysql_select_dbPHP。这似乎暗示着,如果我想将MySQL与PHP结合使用,我有两种选择:

  1. 使用,mysql_select_db但是每次只能使用一个数据库。这是我们当前的设置,将数据库作为名称空间标识符似乎不起作用(它在MySQL Shell中运行良好,因此我知道这与我们的MySQL服务器设置无关)。

  2. 不要使用mysql_select_db。从我看到的一些示例中,这似乎意味着我必须为我进行的每个查询指定数据库。这是有道理的,因为我还不习惯mysql_select_db告诉PHP我想访问什么数据库。这也让我很难过,因为我不想遍历所有代码并为每个查询添加一个数据库名称。

有什么比这更好的了吗?有没有一种方法可以让我在PHP中执行跨数据库MySQL查询,而不必像(2)那样疯狂呢?

澄清
:提出的答案中没有一个实际上允许我执行跨数据库查询。相反,它们允许我分别访问两个不同的DB。我想要一个解决方案,使我能够做一些事情,而SELECT foreign_db.login.username, firstname, lastname from foreign_db.login, user where ...不仅仅是对不同的数据库进行不同的查询。对于它的价值,(2)对我不起作用。


阅读 356

收藏
2020-05-17

共1个答案

一尘不染

您将需要数据库在同一主机上运行。

如果是这样,您应该能够在收藏夹/默认数据库上使用mysql_select_db并手动指定外部数据库。

$db = mysql_connect($hots, $user, $password);
mysql_select_db('my_most_used_db', $db);

$q = mysql_query("
    SELECT *
    FROM   table_on_default_db a, `another_db`.`table_on_another_db` b
    WHERE  a.id = b.fk_id
");

如果您的数据库在其他主机上运行,​​则将无法直接加入。但是您可以进行2个查询。

$db1 = mysql_connect($host1, $user1, $password1);
$db2 = mysql_connect($host2, $user2, $password2);

$q1 = mysql_query("
    SELECT id
    FROM   table
    WHERE  [..your criteria for db1 here..]
", $db1);
$tmp = array();
while($val = mysql_fetch_array($q1))
    $tmp[] = $val['id'];

$q2 = mysql_query("
    SELECT *
    FROM   table2
    WHERE  fk_id in (".implode(', ', $tmp).")
", $db2);
2020-05-17