2010-01-08 6 views
0

Je reçois toujours le coup de requêtes MySQL plus avancées, donc supporter avec moi ici ...Sous-groupe MySQL?

J'ai une table (1 table) avec les colonnes suivantes: name, source, destination, count

Je veux regrouper mes résultats par name, puis les sous-regrouper par l'appariement entre destination et source.

Jusqu'à présent, tout ce que j'ai cette requête est:

SELECT name, destination, source, COUNT(*) FROM clicks_today GROUP BY name, destination, source 

Ce qui me donne des groupes comme ceci:

group 1 
- name 1 
- destination 1 
- source 1 

group 2 
- name 1 
- destination 2 
- source 2 

(etc) 

Qu'est-ce quelque chose que je voudrais vraiment ceci:

group 1 
- name 1 
    - destination 1 
    - source 1 
    - destination 2 
    - source 2 

group 2 
- name 2 
    - destination 1 
    - source 1 
    - destination 2 
    - source 2 

J'utilise PHP pour interroger et afficher mes résultats, en tirant mes résultats avec mysql_fetch_assoc. Je veux un tableau dans un tableau, essentiellement.

Est-ce que cela a du sens? Comment puis-je faire ceci?

Répondre

1

Je ne pense pas qu'il existe un moyen (non-banal) de renvoyer les résultats exactement de cette façon sans implémenter une sorte de procédure/curseur (voir encore: hackneyed), donc je vous recommande d'utiliser PHP pour obtenir ce que vous veulent, à savoir:

while ($row = mysql_fetch_assoc($q)) { 
    $results[$row['name']][$row['destination']][] = $row['source']; 
} 

cela vous donnera un tableau en dents de scie qui ressemblera à quelque chose comme ceci:

array(
    name1 => array(
     destination1 => array(
      source1, 
      source2, 
      // ... 
     ), 
     destination2 => array(
      // ... 
     ), 
    ), 
    name2 => array(
     // ... 
    ), 
    // ... 
); 
+0

Merci, c'est ce que je cherchais. – neezer