是否可以使用PHP代码加入两个查询结果?

时间:2014-07-02 09:33:36

标签: php mysql sql sql-server

我需要JOIN 2个表格(比如User& Order表),以便在我的网络应用中报告模块。

问题是:

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

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

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

  4. 所以我想出了这个:

    我收集了来自不同模型的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服务还是有另一种方法来实现这一目标?

    提前致谢:)

1 个答案:

答案 0 :(得分:0)

要考虑的一些事情:

  1. 您是否真的需要一次性返回所有用户和订单记录
  2. 您是否真的想要为这两种类型的记录
  3. 返回所有
  4. 对于这些报告查询,您最好使用报告模块吗?
  5. 使用CodeIgniter“Active Record”(在3.0中重命名为Query Builder),使用简单的SQL语法是一种更聪明的方法,而不是试图将其变为现实
  6. JOIN真的那么糟糕吗?它不是UNION,您希望数据相关。
  7. 我建议您限制数据返回,SELECT仅限实际需要的字段,制作新的报表模型以避免弄乱通用模型并使用原始SQL执行此操作。

    当你努力坚持像“1 table = 1 model”和“User :: getAllFoos + controller processing> Report :: getMonthlyOrderStats()”这样的规则时,复杂的事情变得更加复杂。