按类别分组表

时间:2017-09-22 19:57:32

标签: php mysql group-by html-table

这是我的第二个问题:

我确实有这个mysql表:

类别:

  • ID-名称catnom
  • 1 -test-1
  • 2 -te4t-1
  • 3 -te5t-2
  • 4 -t85t-3
  • 5 -t75t-4

现在我希望按类别分组并按名称排序以获得如下输出:

Wanted output

我尝试过:

<div class="grid js-masonry"  data-masonry-options='{ "itemSelector": ".grid-item", "columnWidth": 205 }'>           
<?php
$category= ORM::for_table('category')->group_by('catnom')->find_many();
foreach ($category as $cat):
$prods = ORM::for_table('products')->order_by_asc('name')->where('idcat', $cat->id)->find_many();
?>

<div class="grid-item" style="width: 180px">
    <table class="table table-hover table-nomargin table-condensed">
        <thead>
            <tr>    
                <td><?php echo $cat->name?></td>
            </tr>     
        </thead>
    </table>
</div>
<?php endforeach; ?>    
</div>

[IdiORM]

但它只显示一个类别而不是所有类别。有任何建议如何使这个工作?

2 个答案:

答案 0 :(得分:0)

foreach ($category as $cat):
$prods = ORM::for_table('products')->order_by_asc('name')->where('idcat', $cat->id)->find_many();

在这段代码中,你在循环的每次迭代中都覆盖了变量$prods,所以最后你只能获得最后一个循环类别的产品。

你可以这样做:

foreach ($category as $cat):
$prods[$cat->id] = ORM::for_table('products')->order_by_asc('name')->where('idcat', $cat->id)->find_many();

现在每组产品都存储在$ prods数组中,只要您想要获取特定类别的产品,就可以使用$prods[{id}],其中{id}是您想要的类别ID为了获得产品。

答案 1 :(得分:0)

按照catnom分组只会,正如您已经看到的那样,为每个猫咪提供一个类别,并且它应该像那样工作。 &#34;分组&#34;你指的是另一回事。你真正需要做的是通过catnom然后按名称订购。换句话说:

$category= ORM::for_table('category')->find_many();
foreach ($category as $cat):
    ORM::for_table('products')->order_by_asc('catnom')->order_by_asc('name')->where('idcat', $cat->id)->find_many();

我尝试将此作为评论发布,但在代码格式上过于苛刻。我还是新手。