繁体   English   中英

PHP-Mysql表从不同的主机加入

[英]PHP-Mysql table join from different host

abc @ localhost(server)中的数据库abc_db中有一个表employee,xyz @ localhost(server)中的数据库xyz_db中有另一个表部门。 如何使用php mysql连接加入表。 我编写了以下代码,但它不生成任何资源ID。

$conn = mysql_connect("localhost","abc","abcdb");
$conn1 = mysql_connect("localhost","xyz","xyzdb");

$db_select=mysql_select_db("abc_db",$conn);
$db_select1=mysql_select_db("xyz_db",$conn1);

$sql="SELECT * FROM employee e LEFT JOIN department d ON e.department_id=d.id ";
$res=mysql_query($sql);

您不能使用与数据库的不同连接来连接两个表,而不是来自PHP,也不能连接到MySQL服务器。 @RobertPitt有一个好处:你真的需要两个连接吗?可以在同一个主机上连接两个表,但是在一个连接中的不同数据库中连接 - 假设你的连接具有访问两者的必要权限)

如果您可以控制一个或另一个数据库,则可以尝试设置联合表; 确保性能良好(如果数据库机器没有快速,低延迟的连接(即通过电缆直接连接),请不要打扰),并且有一长串限制

可能的小恶魔:

  • 将表从一个服务器复制到另一个服务器(设置棘手)
  • 在PHP中手动“加入”它们(粗略,低效,但如果您无法控制数据库,那么几乎是您唯一的选择)

它是不可能的,它可能在PHP上使用群集/多个节点与复制设置时。

显然你不了解一些关于mysql的技术问题,但是在此之前就给出了。

$master = mysql_connect("master_host","abc","abcdb");
$slave = mysql_connect("slave_host","xyz","xyzdb");

if(mysql_select_db("abc_db",$master) && mysql_select_db("xyz_db",$slave))
{
    //Both Selected
    $sql = mysql_query("SELECT * FROM employee",$master);
    $rows = array();
    while($row = mysql_fetch_assoc($sql))
    {
         //Query the other $slave DB here!
         $slave_sql = mysql_query("SELECT * FROM department WHERE department_id = " . $row['id'],$slave);
         while($sub_row = mysql_fetch_assoc($slave_sql))
         {
             $row = array_combine($sub_row,$row);
         }
         $rows[] = $row;
    }
}

但这不是你想要做的事情。

只是尝试加入同一服务器上的两个数据库 ,因为代码中的主机都是locahost ,这是可能的

SELECT * FROM db1.employees db1_e,db2.records db2_r WHERE db1_e.employee_id = db2_r.record_eid

但是在没有使用复制的情况下,不会将服务器1切换到外部服务器,即使这样,复制也不会有太多帮助。

参考和链接:

http://nathan.rambeck.org/blog/2-joining-mysql-tables-across-multiple-databases

http://dev.mysql.com/doc/refman/5.0/en/replication.html

如果使用的用户具有对所有数据库和表的权限,则可以在不同的数据库和表之间进行选择(如果数据库主机不同,则无法进行此操作)。 这只是一个例子:

SELECT `table_a`.`column` AS `table_a_column`, `table_b`.`column` AS `table_b_column`
FROM `database_a`.`table` AS `table_a`
JOIN `database_b`.`table` AS `table_b` ON `table_b`.`smth` = `table_a`.`smth_else`

您无法使用PHP和SQL“即时”加入它们,您可以做的是从两个主机获取数据并使用PHP手动比较/加入它们。

我们可以说。 您无法在PHP中运行或连接两个不同数据库的两个表。

你可以在mysql提示符上运行查询,但不能在.php文件中运行,因为每次你需要在mysql_query()中调用数据库连接; 所以你不能同时运行两个数据库。

你有单一的选择只需要在数组中获取第一个数据库的表数据,然后运行数组循环,或者你可以在mysql中使用它的id和运行两个while循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM