【问题标题】:PHP Group by foreach loopPHP按foreach循环分组
【发布时间】:2016-12-29 05:29:18
【问题描述】:

在可视化如何为每个循环实现这一点时遇到一些问题,并且不确定该去哪里进行澄清。

我有一个包含 3 个表的数据库:项目、商店、链接。

链接连接到商店和商品,商品和商店是单独的表,因此链接具有属于商店和属于商品的关系。

在显示两个特定项目的页面上,我正在寻找的最终结果是这样的:

Shop      | Item 1 | Item 2 - table headings
--------- | ------ | -------
Shop-name | Link   | Link  

尝试进一步澄清我正在尝试做的事情:

Item[TABLE]
Item 1
Item 2

Shop[TABLE]
Shop 1
Shop 2

Links[TABLE]
Link 1 (belongs to item 1 and shop 1)
Link 2 (belongs to item 2 and shop 1)

页面:显示第 1 项和第 2 项。

在此页面上查询数据库中的所有链接,现在需要将它们分组,以便我将它们放在一个表中,按商店分组。这有意义吗?

关于如何获得此结果的任何建议?我正在使用 Laravel、Eloquent 和 Blade。

【问题讨论】:

  • 您的预期结果是什么?也许您应该写一些商店/商品/链接示例和您期望的结果示例,这对我们也有很大帮助。
  • 这看起来更像是一个db查询问题而不是php
  • @NicolasRacine 预期的结果是所显示的,其中包含与页面上的项目相关的链接的商店表。每个页面都显示两个特定项目,因此我需要显示一个表格,其中包含这些产品的所有可用链接。我遇到的问题是我认为我不能按商店分组,因为我首先查询这两个项目的链接而不是商店。对于上下文,我还在同一页面上显示了项目的规格,我在这里得到了帮助:stackoverflow.com/questions/35526344/…
  • 我不认为分组(至少在 SQL 类型分组方面)是您应该尝试做的事情,因为看起来您的目标实际上是显示每个链接而不是比一些聚合函数的结果。我假设不是每个商店都有所有商品,所以表格中的某些单元格应该是空的,对吗?
  • 正是@Don'tPanic,我之所以想到这个思路是因为我在你上面的评论中链接的问题。有人帮助我将两个项目的规格组合在一起,这些项目在表格中显示的方式与我需要为这些链接显示的方式完全相同。这里唯一真正的区别是链接连接到商店和物品,并且需要按商店对它们进行分组,而不是仅连接到物品的规格,并按规格表中的一列的名称分组。这有意义吗?

标签: php mysql laravel


【解决方案1】:

听起来您并没有真正要求代码,而只是关于如何执行此操作的一般想法。这是一种应该可行的方法,也许我会尝试这样做。我会执行两个查询,第一个是获取所有商品,然后是一个左连接商店到链接的查询(因此您可以获得所有商店以及与每个商店关联的任何链接。)

遍历项目一次以生成列标题。然后,对于每个商店,再次循环遍历项目以生成商店行中的单元格。对于每件商品,如果商店有该商品的链接,则打印一个链接,如果商店没有该商品的链接,则打印一个空白单元格。这样,您将在每个商店行中的每个商品都有一个列,无论该商店是否有商品。

伪代码:

<tr>
foreach items
    print <th>item name</th>
</tr>

foreach shops
    <tr>
        <td>shop name</td>
        foreach items
            <td>if item has link in shop->links print link</td>
    </tr>

至于如何进行雄辩的查询和其他细节,如果没有看到更多你已经拥有的东西,很难给出一个真正的 PHP 代码示例,但希望这至少能展示你可以实现这一点的一种方法背后的想法.

我认为,因为理论上可以有一个没有商品的商店,或者没有任何商店的商品,如果您想在数据库中执行所有这些操作,您需要像完全外部联接这样的东西,据我所知,MySQL 没有做到这一点。可能还有其他方法可以实现它,如果有更好的数据库方面的人有一个想法,我很想看到这样的答案。

【讨论】:

  • 感谢您的建议,它非常有帮助,我会修改这个想法。不需要确切的代码,我只是很难将我的头绕在更复杂的循环上,但如果我编写了伪代码,我通常可以弄清楚!我会回到这个。
  • 祝你好运!如果有什么需要澄清的地方,请告诉我,我会努力改进答案。
猜你喜欢
  • 2011-06-09
  • 2020-05-17
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 2016-09-26
  • 2012-07-19
  • 1970-01-01
相关资源
最近更新 更多