我有一个包含客户数据的旧数据库和新数据库。现在我必须记住,我正在寻找的客户是新系统的一部分,还是我搜索之前的旧系统 - 在我的应用程序中。这有点像哈塞尔 我想将两个结果集合在一起,并将它们放入我的应用程序中的一个单独的概述中 - 这是一个带有搜索功能的表。
最佳做法是什么?
旧的和新的数据库结构(系统)都包含多个连接在一起的表,以便获得所需的必要信息。而且他们并不完全平等 新系统分为更多表,并添加了一些新表,以满足业务扩展服务时的需求。
但返回给观众的结果是一样的。
是否可以合并两个数组,它们将数据库查询的结果集保存在一起? - 然后对其进行while
- 循环或foreach
- 循环?
尚不确定如何,但如果这是一个解决方案,我会感谢一些帮助,寻找正确的方向..
答案 0 :(得分:1)
通常,您可以在数据库级别使用UNION
甚至UNION ALL
组合来自多个选择或表的结果。您只需要注意表/选择返回相同的列。
例如:
-- old table/database
select t.customername as name, t.street as street, t.city as city
from old_data.customers t
where t.name like 'M%'
union
- new table/database
select p.name as name, a.street as street, a.city as city
from new_data.person p
inner join new_data.address a on p.address_id = a.id
where p.name like 'M%'
使用UNION
单个SELECT
语句中的表或列的名称无关紧要。重要的是有相同数量的列,并且它们具有兼容的类型。
实际问题可能在于从多个数据库访问表。解决方案取决于您使用的DBMS以及旧数据库和新数据库所在的位置。
如果两个数据库都存储在同一台服务器上,就像你的情况一样,大多数DMBS(例如MySQL)都适用于上面的查询(你将数据库名称添加到database.table
中的表名并且你很好)。
如果两个数据库未存储在同一服务器上,则解决方案将取决于DBMS。例如,Oracle允许您指定数据库链接,您可以使用它来跨多个服务器跨越查询。或者,您可以使用物化视图缓存远程表。
使用MySQL,有不同的可能性,在this question中讨论,例如
答案 1 :(得分:0)
由于两个数据库都在同一台机器/服务上,我们正在谈论mysql,你实际上甚至可以编写2个查询并将它们联合起来。或者在指向您想要的任何数据库时使用任何聪明的查询:
select id, name from db1.user UNION select id, name from db2.user;
如果db1.user与db2.user具有不同的结构,这甚至可以工作。只要至少id和name是相同的类型......