2010-02-07 112 views
0

我正在尝试使用PHP和MySQL生成分组/分层报告。使用PHP和MySQL进行分组/分层报告

tbl_items具有下列字段:(1)用户名和(2)ITEMNAME

单个用户可以具有列出多个项目。

我想生成一个输出,其中的数据按每个用户分层。例如:

*用户名#1
-ItemName 1
-ItemName 2
*用户名#2
-ItemName 3
*用户名#3
-ItemName 4
-ItemName 5

我一直在玩代码,试图在循环内部放置一个循环......但无法弄清楚如何去做!这是我到目前为止:

<? 
$sql="SELECT * FROM $tbl_items"; 
$result=mysql_query($sql); 
?> 

<html> 
<body> 

<? php while($rows=mysql_fetch_array($result)){ ?> 

Item: <? echo $rows['ItemName']; ?> (<? echo $rows['UserName']; ?>) 

<?php } mysql_close(); ?> 

</body> 
</html> 

请帮忙!

回答

1
while($row=mysql_fetch_array($result)) 
{ 
    $itemsByUser[$row['UserName']][] = $row; 
} 

foreach($itemsByUser as $user => $items) 
{ 
    echo $user . "<br>"; 
    foreach($items as $array) 
    { 
     echo "-" . $array['ItemName']; 
    } 
} 

这首先创建一个按用户名顺序排列的数组。这意味着每个用户在数组中都有一个元素,其中包含已分配给用户的项目数组。

然后,我们检查每个用户并打印出所有项目。

+0

谢谢,这工作完美! – Michael 2010-02-07 04:12:52

+0

如果工作完美,您可能需要单击我答案旁边的绿色复选标记以将其标记为正确。 – 2010-02-07 04:18:33

+0

你将如何去添加第二个分组级别?假设女性用户和男性用户? (女性 - >用户名 - >项目/男性 - >用户名 - >项目) – Michael 2010-02-08 22:29:41