Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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_Sql_Multiple Tables - Fatal编程技术网

Php 如何将多个数据库中的数据合并到一个结果集中。(新旧制度)

Php 如何将多个数据库中的数据合并到一个结果集中。(新旧制度),php,sql,multiple-tables,Php,Sql,Multiple Tables,我有一个旧的和一个新的客户数据数据库。现在,在我搜索应用程序之前,我必须记住我要寻找的客户是新系统的一部分,还是旧系统的一部分。这有点麻烦。 我想将两个结果集合并在一起,并将它们放入我的应用程序中的一个大型概览中——这是一个带有搜索功能的表 这方面的最佳做法是什么 旧的和新的数据库结构(系统)都由多个表组成,这些表连接在一起以获得所需的必要信息。而且他们并不完全平等。 新系统被拆分成更多的表,并添加了一些新表,以满足业务扩展其服务时的需要 但是返回给查看器的结果是相同的 是否可以将保存数据库查询

我有一个旧的和一个新的客户数据数据库。现在,在我搜索应用程序之前,我必须记住我要寻找的客户是新系统的一部分,还是旧系统的一部分。这有点麻烦。
我想将两个结果集合并在一起,并将它们放入我的应用程序中的一个大型概览中——这是一个带有搜索功能的表

这方面的最佳做法是什么

旧的和新的数据库结构(系统)都由多个表组成,这些表连接在一起以获得所需的必要信息。而且他们并不完全平等。
新系统被拆分成更多的表,并添加了一些新表,以满足业务扩展其服务时的需要

但是返回给查看器的结果是相同的

是否可以将保存数据库查询结果集的两个数组合并在一起然后在那上面执行
while
-循环或
foreach
-循环


目前还不确定是如何实现的,但如果这是一个解决方案,我希望您能帮助我找到正确的方向。

通常,您可以在数据库级别使用
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以及新旧数据库的位置

如果两个数据库都存储在同一台服务器上,就像您的情况一样,大多数DMB(如MySQL)都可以用于上面的查询(您可以在
database.table
中将数据库名称前置到表名,这样就可以了)

如果两个数据库不存储在同一台服务器上,那么解决方案将取决于DBMS。例如,Oracle允许您指定数据库链接,您可以使用它跨多个服务器跨查询。或者,可以使用物化视图缓存远程表


对于MySQL,有不同的可能性,如中所述。通常,您可以在数据库级别使用
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以及新旧数据库的位置

如果两个数据库都存储在同一台服务器上,就像您的情况一样,大多数DMB(如MySQL)都可以用于上面的查询(您可以在
database.table
中将数据库名称前置到表名,这样就可以了)

如果两个数据库不存储在同一台服务器上,那么解决方案将取决于DBMS。例如,Oracle允许您指定数据库链接,您可以使用它跨多个服务器跨查询。或者,可以使用物化视图缓存远程表


对于MySQL,有不同的可能性,在中讨论过,例如

,因为两个数据库都在同一台机器/服务上,我们说的是MySQL,实际上您甚至可以编写两个查询并合并它们。或者在指向您想要的任何数据库时使用任何智能查询:

select id, name from db1.user UNION select id, name from db2.user;

如果db1.user的结构与db2.user的结构不同,这甚至可以工作。只要id和名称至少是相同的类型…

因为两个数据库都在同一台机器/服务上,我们说的是mysql,实际上您甚至可以编写两个查询并合并它们。或者在指向您想要的任何数据库时使用任何智能查询:

select id, name from db1.user UNION select id, name from db2.user;

如果db1.user的结构与db2.user的结构不同,这甚至可以工作。只要id和名称至少是相同的类型…

这似乎很奇怪。为什么不能将旧数据迁移到新数据库中?两个数据库是否在同一个mysql服务上?或者它们是不同的装置/机器?或者它甚至不是mysql?如果您正确地将旧列映射到新列中,您也可以使用query来执行此操作。@nl-x,为什么您会认为他使用的是mysql?这个问题没有被贴上这样的标签,我在文章中没有看到任何内容。早些时候,该公司只提供汽车调谐,但现在他们还提供拖拉机、卡车和船舶调谐。此外,他们还需要一种方法,使每个零售商都有机会将调整注册为自己的所有者,并将客户指定为用户。。。这使得直接迁移非常困难。因此,我创建了这个新系统以“提高灵活性”。无论如何它是MySQL。两个数据库在同一台服务器上..这似乎很奇怪。为什么不能将旧数据迁移到新数据库中?两个数据库是否在同一个mysql服务上?或者它们是不同的装置/机器?或者它甚至不是mysql?如果您正确地将旧列映射到新列中,您也可以使用query来执行此操作。@nl-x,为什么您会认为他使用的是mysql?这个问题没有被贴上这样的标签,我在文章中没有看到任何内容。早些时候,该公司只提供汽车调谐,但现在他们还提供拖拉机、卡车和船舶调谐。此外,他们还需要一种方法,使每个零售商都有机会将调整注册为自己的所有者,并将客户指定为用户。。。这使得迁移变得相当困难