PHP Mysql 跨数据库连接
Posted
技术标签:
【中文标题】PHP Mysql 跨数据库连接【英文标题】:PHP Mysql joins across databases 【发布时间】:2010-12-13 02:50:06 【问题描述】:假设我在同一物理服务器上有两个独立的数据库 X 和 Y。
我的所有查询目前都用完了 X。
我发现我在 Y 中有一个表,我希望 X 可以使用它进行 JOINS。
所以...现在我在 X 和 Y 中保留了一张我需要的 X 和 Y 表的副本,但是 Y 中的数据不断变化,因此该副本很快就会过时。对于这个应用程序来说并不重要,但对于我现在正在设计的另一个应用程序来说,这是行不通的。
X 现在只需要读取 Y 中的表。
有没有一种有效的方法来跨两个数据库进行连接?
我更喜欢 mysql 解决方案,而不是在 php 中打开多个数据库连接。
谢谢。
编辑:那么这些行会变成什么?:
$conn = mysql_connect('localhost','username','password');
@mysql_select_db('database_name',$conn)
是的.. 这是一个旧应用程序,因此使用 mysql 而不是 mysqli。假设我可以转换它。
EDIT2:所以在我没有指定database_name.table_name
并且只指定table_name
的地方,我得到了选择的任何内容,而在我指定database.table_name
的地方,我得到了我所要求的......对吗?是的。有效。
EDIT3:跨数据库连接与同一数据库内的连接相比,是否会对性能产生重大影响?没有。看起来一样快。
感谢大家的回复。
【问题讨论】:
这些行保持不变。您仍然必须使用 mysql_select_db(),因为 mysql 在执行查询之前需要一个活动的 db/schema。 mysql_select_db() 实际上不是必需的。它只是设置活动的默认数据库,你可以不用它,如果你指定db.table
【参考方案1】:
你必须给另一个数据库中的表起别名:
select a.id
, b.foreign_id
from database1.table1 a
join database2.table1 b
on b.foreign_id = a.id
【讨论】:
【参考方案2】:编辑:那么这些行会变成什么?:
$conn = mysql_connect('localhost','用户名','密码'); @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。
【讨论】:
我所有的新应用程序都使用 mysqli 和准备好的语句。重复的东西更快,其余的差不多。【参考方案3】:只使用 SQL
SELECT col1, col2 FROM foo f LEFT JOIN db2.bar b ON b.col1 = f.col1
【讨论】:
【参考方案4】:如果 2 个数据库位于同一台服务器上,您只需在连接查询中使用数据库名称限定表即可。
select * from database1.table1 as t1
inner join database2.table2 as t2
on t2.fk_id = t1.pk_id
【讨论】:
以上是关于PHP Mysql 跨数据库连接的主要内容,如果未能解决你的问题,请参考以下文章