2010-02-07 8 views
0

J'essaie de générer un rapport groupé/stratifié en utilisant PHP et MySQL.Rapports groupés/stratifiés utilisant PHP et MySQL

tbl_items a les champs suivants: (1) UserName et (2) itemName

Un utilisateur unique peut avoir plusieurs éléments énumérés.

Je souhaite générer une sortie dans laquelle les données sont stratifiées par chaque utilisateur. Par exemple:

* UserName # 1
-ItemName 1
-ItemName 2
* UserName # 2
-ItemName 3
* UserName # 3
-ItemName 4
-ItemName 5

Je continue de jouer avec le code, en essayant de mettre une boucle dans une boucle ... mais je n'arrive pas à comprendre comment le faire! C'est ce que j'ai pour le moment:

<? 
$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> 

Aidez s'il vous plaît!

Répondre

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']; 
    } 
} 

Cette première crée un tableau qui est trié par nom d'utilisateur. Cela signifie que chaque utilisateur a un élément dans le tableau qui contient un tableau des éléments qui ont été assignés à l'utilisateur.

Ensuite, nous allons sur chaque utilisateur et imprimer tous les éléments.

+0

Merci, cela a fonctionné parfaitement! – Michael

+0

Si cela fonctionne parfaitement, vous pouvez cliquer sur la coche verte à côté de ma réponse pour la marquer comme correcte. –

+0

Comment voulez-vous ajouter un deuxième niveau de regroupement? Disons les utilisateurs féminins et les utilisateurs masculins? (Femmes -> Nom d'utilisateur -> Articles/Hommes -> Noms d'utilisateur -> Articles) – Michael