我有来自两个不同来源的两个独立数据库,但具有相同的数据类型和行,我可以将这两个数据都返回到一个数组中,以便将它们作为一个来源使用吗?
2 回答
如果两个数据库位于同一台服务器上,并且两个表的结构相同,则可以使用UNION:
SELECT *
FROM `database1`.`table1`
WHERE `condition1`
UNION
SELECT *
FROM `database2`.`table2`
WHERE `condition2`
用您的实际值替换 database1、database2、table1、table2、condition1 和 condition2。
(归功于上面 biziclop 和 bfavaretto 的评论 - 但作为答案发布以将其他人从半答案中拯救出来。)
摘要:使用联合表(http://dev.mysql.com/doc/refman/5.0/en/federated-storage-engine.html)和 UINION(或 JOIN)。
细节:
假设您有一个“主”(本地)MySQL 表和一个辅助“远程”数据库。在您的“主要” MySQL 二进制文件中,为“联合表”编译它 - 这允许您访问远程服务器上的表,就好像它们是本地的一样。默认情况下不启用联合表。
然后在主库中创建一个与远程数据库中的表结构完全相同的表,但在创建表指令的末尾添加“CONNECTION”字符串。这会将其设置为联合表,并且实际上将从远程服务器获取数据。
然后查询主服务器,在主表和联合表之间使用 UNION(或 JOINS,取决于您想要的),这将返回一组结果,就好像它仅来自主服务器一样,即使它也从远程获取数据。
请注意,它的效率不是很高,手册中有关于它如何进行多个查询的警告(例如,在每次调用之前都以“SHOW TABLES”开头,它可能会返回比预期更多的行,创建本地临时表等)。