php join 多个查询结果 laravel

Posted

技术标签:

【中文标题】php join 多个查询结果 laravel【英文标题】:Php join multiple query results laravel 【发布时间】:2020-03-08 23:18:00 【问题描述】:

我有两个queries 需要运行才能获得,一个合同列表和一个销售列表,因为每个客户都有一个重复的合同我已经编写了一个查询,该查询将返回 customer_id 和他们最终合同的日期,同时加入我们的产品表以过滤某些产品。另一个查询通过连接到几个表返回给定区域的销售列表,无论如何在调用这些查询之后我可以使用php 加入它们。


    $contracts = DB::table('contracts as c').....
    $leads= DB::table('contracts as l')..

因此,在创建了这两个都具有 customer_id 列的集合之后,我想使用 PHP 加入它们,如果这些在我的数据库中的两个表都是一个简单的 left_join,但是,我想不出办法它与采石场的输出....提前感谢所有帮助。我一直在做一些研究,并认为我需要以某种方式进行映射

   $leads = $leads->map(function ($item, $key) 
    $single_lead = $contract->where('l.customer_id',$item->spp.customer_id);
    return collect($item)->merge($single_lead);

类似这样的东西,但这不起作用,我被卡住了,所以我应该检查潜在客户中的每个项目,然后将其与具有相同 customer_id 的合同信息合并

【问题讨论】:

【参考方案1】:

您的问题不是很清楚,但提示您进行左连接, 你可以这样做:

$query = DB::table('contracts')->leftJoin('customer','customer.id','=','contracts.customer_id')->get()

你可以在Laravel Docs看到它

【讨论】:

我不想加入表我想加入查询结果 我不确定您的具体情况,但在 PHP 中执行它是一个坏主意,就好像有大量数据并且您正在使用循环,那么它可能会导致非常耗时的任务,或者可能会结果进入超时。因此,您应该找到一种方法来查询以获取所需的数据。如果您的两个表中都有 customer_id 列,那么您还可以加入 3 个表,包括您的 customer 表和另外两个带有 customer_id 列的表。 在那种情况下,你知道是否有办法,当我根据 cutomer_id 进行 left_join 时,它应该是右边那个特定 customer_id 的最新观察......我们将我们的合同保存在一个地方,为所有相同的客户保留旧合同信息,所以当我加入时,我最终得到的是第一份合同信息,而不是最后一份

以上是关于php join 多个查询结果 laravel的主要内容,如果未能解决你的问题,请参考以下文章

在 php codeigniter 中使用 join/concat 的 mysql 查询结果

mysql的unionleft join right join inner join和视图学习

在 MySQL 和 PHP 中使用多表和 LEFT JOIN 查询非常慢

许多(许多)SQL JOIN 与多个查询

使用 GROUP_CONCAT 进行 LEFT JOIN 的奇怪结果

1110Nested Loop Join算法