在标题下对结果进行分组

时间:2009-07-21 11:50:30

标签: php loops join

这可能是非常明显和简单的 - 但对我而言,我的基本知识并非如此:)

我有两张桌子:

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

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

每个项目可以包含0到几乎无限的子项目,并且与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的了解正在增长,但仍然有限,而且我是以程序的方式做到这一点(即它不是OOP,我试图抓住但还没有完全)所以跟我说话就好像我是傻瓜

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作,每次更改时都会打印一个新的ITEM NAME:

$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";
}

答案 1 :(得分:1)

使用包含最后一个标题的变量,只有当它与上一个标题不同时才打印当前标题:

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