2009-07-21 136 views
0

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

我有两个表:

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的知识在增长,但仍然有限,我以程序化的方式来做这件事(即它不是OOP,我试图把握但没有完全),所以跟我说话就像我一样笨。

回答

1

使用包含最后航向的变量,然后打印当前只有当它不同于过去的标题:

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

谢谢,工作完美! – Katherine 2009-07-21 12:28:47

1

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

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