跨数据库的PHP Mysql连接

10

假设我有两个分开的数据库X和Y,它们位于同一台物理服务器上。

目前,我的所有查询都是在X中运行的。

我发现Y中有一个表,我想让X可以使用该表进行连接查询。

所以...现在我将我需要在X和Y中都使用的一个表的副本保存在X和Y中,但是Y中的数据经常会发生变化,所以副本很快就会过时。对于当前应用程序来说不是关键问题,但是对于我正在设计的另一个应用程序来说,这样做就不可行了。

X目前只需要读取Y中的表。

是否有一种有效的方法可以在这两个数据库之间进行连接查询?

我希望使用mysql解决方案,而不是在php中打开多个数据库连接。

谢谢。

编辑:那么这些语句会怎样呢?

$conn = mysql_connect('localhost','username','password');
@mysql_select_db('database_name',$conn)

是的,这是一个旧应用程序,因此使用了mysql而不是mysqli。我想我可以将其转换。

编辑2:所以当我没有指定database_name.table_name,只指定table_name时,我得到任何被选中的内容,而当我指定database.table_name时,我得到我要求的内容……对吗?是的。它有效。

编辑3:在跨数据库连接与同一数据库内连接中进行联接是否会有显著的性能损失?没有。看起来一样快。

感谢大家的回复。


你仍然需要使用mysql_select_db(),因为在执行查询之前,mysql需要一个活动的数据库/模式。 - longneck
1
mysql_select_db() 实际上并不是必需的。它只是设置活动默认数据库,如果您指定了 db.table,则可以不使用它。 - Jakub
4个回答

13

你需要给另一个数据库中的表进行别名:

select a.id
     , b.foreign_id
  from database1.table1 a
  join database2.table1 b
    on b.foreign_id = a.id

4
如果两个数据库在同一台服务器上,您可以在连接查询中使用数据库名称限定表格。
select * from database1.table1 as t1
 inner join database2.table2 as t2
 on t2.fk_id = t1.pk_id

2
英译中: 编辑:那么这些行变成了什么呢?: $conn = mysql_connect('localhost','username','password'); @mysql_select_db('database_name',$conn)
mysql_select_db是可选的。因为它只选择要使用的活动数据库。 http://us3.php.net/manual/en/function.mysql-select-db.php 而且.. 这是一个旧应用程序,因此使用mysql而不是mysqli。我想我可以将其转换。
在我看来,我认为使用MYSQL与慢速没有任何关系,从我自己对它的研究中,MYSQLi与MYSQL之间的速度提升并不大。实际测试并没有表明它是一个重要的性能驱动程序。老实说,我已经为所有我的应用程序坚持使用MYSQL。

1
我所有的新应用程序都使用mysqli和预处理语句。重复的内容更快,其他方面基本相同。 - Daren Schwenke

1

只需使用SQL

SELECT col1, col2 FROM foo f LEFT JOIN db2.bar b ON b.col1 = f.col1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接