Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 连接来自不同数据库的两个表_Php_Mysql_Phpmyadmin - Fatal编程技术网

Php 连接来自不同数据库的两个表

Php 连接来自不同数据库的两个表,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,我知道有很多关于这方面的帖子,但我无法让它对我的代码起作用 正如标题所示,我希望将来自两个不同DBs的两个表连接在一起 这是我的密码: $dbh1 = mysql_connect("$host", "$username", "$password")or die("cannot connect"); $dbh2 = mysql_connect("$host2", "$username2", "$password2", true)or die("cannot connect");

我知道有很多关于这方面的帖子,但我无法让它对我的代码起作用

正如标题所示,我希望将来自两个不同DBs的两个表连接在一起

这是我的密码:

 $dbh1 = mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
    $dbh2 = mysql_connect("$host2", "$username2", "$password2", true)or die("cannot connect"); 
    mysql_select_db("$db_name", $dbh1)or die("cannot select DB");
    mysql_select_db("$db_name2", $dbh2)or die("cannot select DB");

//first table  
//$sql = mysql_query("SELECT InterestedEntityId, Score FROM users.`user_interests` WHERE UserId= //$userID ORDER BY Score DESC", $dbh1);

//second table
//$sql = mysql_query("SELECT entities.`Name` FROM tags.`entities` WHERE Id = InterestedEntityId", $dbh2);
我想一次性获得select语句中提到的3个字段(即InterestedEntityId、Score、entities.
Name

您知道如何在一个sql查询中连接这两个表吗。我尝试使用内部联接并添加表名(正如线程所建议的),但查询没有返回任何内容


有什么想法吗?

像这样的想法应该行得通

SELECT t1.InterestedEntityId, t1.Score, t2.Name
  FROM DB1.users.`user_interests` t1
  JOIN DB2.tags.`entities` t2 ON t2.UserId = t1.Id
注意:使用PDO,因为mysql已被弃用,而且不够安全。

。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO


虽然理论上可以在同一台服务器上连接来自两个不同数据库的表,但您尝试的操作不可能奏效,因为您似乎正在访问两个不同的服务器

为了获得您想要的结果集,您需要手动组合它们

例如(使用PDO):


基本上,模型是:

SELECT dbName1.TableName1.ColumnName1, dbName2.TableName2.ColumnName2 FROM dbName1.TableName1 JOIN dbName2.TableName2 ON dbName1.TableName1.ColumnName1 = dbName2.TableName2.ColumnName2

您需要有权限使用您的用户访问这两个数据库,并在表名之前添加数据库名。当然可以。我的代码的这一部分出现在我的原始脚本中:)我想到了这一点,但这样做需要我获取名称,然后与该表的每一行一起追加。这是浪费,更不用说花费太多的时间了。@Shane如果你在处理两个不同的数据库服务器,就没有别的办法了。如果
$host
$host2
的值始终相同,则可以查看连接,但在这种情况下不需要这两个连接。如果您按照代码建议处理两个不同的服务器,请检查我的编辑。@Shane有比这更快的方法(例如,您的脚本读取一个表,将内容保存在CSV中,然后使用加载表…将CSV放入另一个数据库),但仍然不快。@Kickstart确实很好,实际上,实现这一点的最佳方法是确保所有必需的数据都在单个数据库中可用,因此它只是一个简单的
连接
。我猜这是因为OP提出了根本不可能的问题——但也许我是在假设我不应该是…@DaveRandom——我同意。当数据在不同的数据库服务器上分割时,您会遇到一个大问题。几乎破坏了关系数据库的整个概念。但如果数据位于两个独立的服务器上,则可以将其复制到另一个服务器上进行连接,然后加载表。。。是一种效率较低的方法。我是否愿意费心去做这件事在很大程度上取决于需要多久做一次,以及每台服务器上涉及的数据量。也可能是使用联邦数据库的想法-
SELECT dbName1.TableName1.ColumnName1, dbName2.TableName2.ColumnName2 FROM dbName1.TableName1 JOIN dbName2.TableName2 ON dbName1.TableName1.ColumnName1 = dbName2.TableName2.ColumnName2