【问题标题】:Is it possible to join two query result with PHP code?是否可以使用 PHP 代码连接两个查询结果?
【发布时间】:2014-08-23 00:53:54
【问题描述】:

我需要JOIN 2 个表(比如说UserOrder 表)用于我的网络应用程序中的报告模块。

问题是:

  1. User位于不同的服务器和不同的 Order 表中的 DBMS。从技术上讲,它是一个不同的系统,因此User 表位于 SQL Server DB 上,而Order 表位于 MySQL DB 上。

  2. 我无法使用 SQL Server 的链接服务器,因为我的公司政策不允许。所以,我不能直接用 SQL 代码JOIN 他们。他们希望我使用网络服务而不是链接服务器。

  3. 来自这些表的JOIN 操作的结果有大量行(可能超过 10,000 行,因为数据旨在报告)。所以,我认为使用 Web Service 映射它们是一件可怕的事情。

所以我想出了这个:

我收集了来自不同模型的 2 个查询结果,并将它们与我的应用程序代码连接起来(我正在使用 PHP 和 CodeIgniter):

// First result
$userData = $this->userModel->getAllUser();

// Second result
$orderData = $this->orderModel->getAllOrder();

$userData 包含具有以下列的所有用户实体:

[UserId, Username, Address, PhoneNumber, etc..]

$orderData 包含所有具有以下列的订单实体:

[OrderId, UserId, Date, etc..]

但是是否可以在 PHP/CodeIgniter 中加入这两个查询结果?

海量数据的性能如何?

我应该按照建议使用 Web 服务还是有其他解决方案来完成此操作?

提前致谢:)

【问题讨论】:

  • 可以从 MsSQL 数据库中读取并插入到 MySQL 临时表中,然后将其连接到您感兴趣的 MySQL 表中吗?
  • 哦,看来有可能...我从 SQL Server 查询中得到一个数组,然后将其插入 MySQL 表中。我应该循环每一行并一个接一个地插入它们还是如何插入?
  • 取决于数量。可能最容易循环构建要插入的批次(因此您一次插入数百行),因为这样会更有效。

标签: php mysql sql sql-server


【解决方案1】:

需要考虑的一些事情:

  1. 您是否真的需要一次性返回所有用户和订单记录
  2. 您是否真的要为这两种类型的记录返回所有
  3. 为这些报告查询使用报告模块会更好吗?
  4. 与尝试使用 CodeIgniter“Active Record”(在 3.0 中更名为 Query Builder)来填充它相比,纯 SQL 语法是否更明智
  5. JOIN 真的那么糟糕吗?它不是UNION,您希望数据相关。

我会建议您限制您的数据返回,SELECT 仅限您实际需要的字段,创建一个新的报告模型以避免试图弄乱您的通用模型并使用原始 SQL 来执行此操作。

当您过于努力地坚持“1 个表 = 1 个模型”和“User::getAllFoos + 控制器处理 > Report::getMonthlyOrderStats()”等规则时,复杂的事情会变得更加复杂。

【讨论】:

  • 感谢您的回答。 1. 是的,因为我需要将所有报告摘要导出到 Excel。 2. 不,因为我只需要有任何订单的用户。 3. 是的,最好有一个单独的模块。 4. 是的,当然纯 SQL 会很棒。但是,我无法获得直接的 SQL,因为该表在不同的 DBMS 之间是分开的。 5. 不,不是。但问题不在于 SQL JOIN 性能本身。问题是如何在没有直接SQL的情况下执行JOIN?
  • 哦。然后映射一组用户 ID 并遍历事物。如果你真的不能使用 SQL 来解决这个问题,因为不同的服务器是不同的引擎,那么 foreaches 是你唯一真正的选择。
猜你喜欢
  • 2013-06-24
  • 1970-01-01
  • 2021-04-20
  • 2011-05-16
  • 2016-09-18
  • 1970-01-01
  • 2020-10-09
  • 2012-01-01
  • 1970-01-01
相关资源
最近更新 更多