一个标题下分组结果(Grouping results under a heading)

2019-10-29 19:31发布

这可能是真的很明显,简单的 - 但它是不是我与我的基础知识:)

我有两个表:

table_items
-----------
item_id ¦ item_name ¦ item_describtion ¦ more item stuff.....

table_subitems
-----------------
subitem_id ¦ item_id ¦ subitem_name ¦ More subitem stuff

每个项目可以有零到几乎无限的子项,并通过场ITEM_ID是相关的。

我想打印出来的项目分组的子项。

我目前做这与选择子项目,其中一个查询table_items.item_id = table_subitems.item_id ,然后用while循环,这是很好的,只要它去,我得到这样的显示出来:

Item One
========
Subitem 0ne

Item One
========
Subitem two

Item One
========
Subitem three

Item Two
========
Subitem one

Item Three
==========
Subitem one

Item Three
==========

 Subitem two

但我想要

ITEM ONE
--------
Subitem one
Subitem two
Subitem three

ITEM TWO
--------
Subitem one

ITEM THREE
----------
Subitem one
Subitem two

我该怎么做呢? 它是查询还是我如何显示结果的功能?

我的PHP的知识增长,但仍然有限,而我在一个程序的方式这样做(即它不是面向对象,而我试图把握,但还没有完全),所以跟我说话我傻。

Answer 1:

使用包含最后航向的变量并打印,只有当它从过去的不同之处在于当前航向:

$last = null;
while ( /* … */ ) {
    if ($row['item_id'] != $last) {
        echo '<hx>'.$row['item_name'].'</hx>';
        $last = $row['item_id'];
    }
    echo $row['subitem_name'];
}


Answer 2:

你可以做这样的事情,它每次更改时间打印新物品名称:

$last_item_id = null;

foreach ($rows as $row) {
    if ($row->item_id != $last_item_id) {
        echo "<h2>{$row->item_name}</h2>\n";
        $last_item_id = $row->item_id;
    }

    echo "{$row->subitem_name}<br />\n";
}


文章来源: Grouping results under a heading
标签: php loops join