在上一集中(如何在MySQL中构建跨数据库查询),我学习了如何在MySQL中构建跨数据库查询。这很好用,但是当我们的英雄尝试在PHP中使用这种新发现的知识时,他发现了他最好的朋友FAIL在等他。
我看了看mysql_select_dbPHP。这似乎暗示着,如果我想将MySQL与PHP结合使用,我有两种选择:
mysql_select_db
使用,mysql_select_db但是每次只能使用一个数据库。这是我们当前的设置,将数据库作为名称空间标识符似乎不起作用(它在MySQL Shell中运行良好,因此我知道这与我们的MySQL服务器设置无关)。
不要使用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)对我不起作用。
SELECT foreign_db.login.username, firstname, lastname from foreign_db.login, user where ...
您将需要数据库在同一主机上运行。
如果是这样,您应该能够在收藏夹/默认数据库上使用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);