2009-12-11 6 views
0

J'ai des lignes dans une base de données qui représentent des éléments de campagne dans une vente. Chaque élément de campagne comporte cinq colonnes:Regroupement des éléments associés dans PHP

  • id: Clé primaire.
  • sale_id: vente dont fait partie cet élément de ligne (clé étrangère d'une table Sales).
  • product_id: Le produit auquel cet élément correspond (une clé étrangère à une table Products).
  • groupe: groupe de postes dont cet élément fait partie. Is_subitem: Indique si cet élément de campagne est un sous-élément ou non. Il est garanti qu'il y ait exactement une valeur "false" ici pour tout groupe d'éléments de campagne ayant la même valeur group.

Je souhaite effectuer une itération sur toutes les lignes pour un particulier sale_id pour produire une liste dans laquelle:

  • éléments de ligne avec des valeurs group identiques sont associés ensemble
  • l'élément de ligne avec is_subitem == false pour que groupe apparaît en premier

Comment puis-je créer une structure de données qui facilite cela et itérer comme je le souhaite?

Répondre

1

Quelque chose comme ça pourrait fonctionner .. Je ne l'ai pas testé.


$data = array(); 
$result = mysql_query($your_query_here); 

while($row = mysql_fetch_assoc($result)) 
{ 
    if(!isset($data[$row['group']])) 
    { 
     $data[$row['group']] = array(); 
    } 

    if(false == $row['is_subitem']) 
    { 
     // when subitem is false we put the item at at the front of the array by unshifting it. 
     array_unshift($data[$row['group']], $row); 
    } 
    else 
    { 
     // else we just add the row to the end. 
     $data[$row['group']][] = $row; 
    } 
} 
0

J'ai modifié ce qui précède plusieurs fois, mais il devrait être plutôt bon maintenant.

+0

Il n'est pas nécessaire de créer une nouvelle réponse juste pour cette remarque. Mettez-le dans votre réponse éditée. Btw 'ci-dessus' devient inutile si vous trier les réponses par «plus récent»;) –

+0

Merci Felix - Je suis nouveau. – Anon

Questions connexes