# [Mysql]COUNT und GROUP BY



## Kendoo (29. November 2007)

Hallo,
ich habe jetzt nach langem probieren eine Lösung gefunden, wie ich aus folgender Abfrage jeweils die Gesamtmengen der gruppierten Daten bekomme.

```
<?php $row_site = mysql_query("SELECT main_category, auxiliary_category FROM ".$table_angebot." GROUP BY main_category, id ORDER BY main_category, auxiliary_category ASC") OR die (mysql_error());
```

Ich möchte jetzt jeweils zu main_category und auxiliary_category immer die Gesamtanzahl der betroffenen Datensätze wissen. Ich habe es nun folgendermaßen gelöst:

```
<?php
while ($ext = mysql_fetch_array($row_site)) {
$select_mc = mysql_query("SELECT id FROM ".$table_angebot." WHERE main_category = '".$ext['main_category']."'") OR die (mysql_error());
$ges_mc = mysql_num_rows($select_mc);
$select_ac = mysql_query("SELECT id FROM ".$table_angebot." WHERE auxiliary_category = '".$ext['auxiliary_category']."'") OR die (mysql_error());
$ges_ac = mysql_num_rows($select_ac);
```

Das sind dann also sehr viele Abfragen! 

Das Ergebnis soll dann so aussehen:
Bagger (18)

Minibagger(3)
Kettenbagger(12)
Mobilbagger(3)
Krane (10)

Hochbaukran(3)
usw.

Die grundsätzliche Struktur hab ich auch so hinbekommen. Nur halt die Anzahl in den Klammern gelingt mir nur durch mehrere Abfragen.
Könnte man dieses auch in einer einzigen Abfrage unterbringen?

Danke schonmal für die Antworten.

mfg Kendoo


----------



## Admi (29. November 2007)

?


```
SELECT 
count(*),
main_category, 
auxiliary_category 
FROM ".$table_angebot." 
GROUP BY main_category, id 
ORDER BY main_category, auxiliary_category ASC
```


----------



## Kendoo (29. November 2007)

Hi,
danke für die schnelle Antwort.
Ich hatte es vorher schon mit SELECT COUNT(*) AS count, nur damit bekomme ich immer nur den Wert 1. Wenn ich jetzt nur count(*) nehme, wie bekomme ich dann die Werte nach php? Also wie kann ich die aus dem Array holen?

mfg Kendoo


----------



## Admi (29. November 2007)

Admi hat gesagt.:


> ?
> 
> 
> ```
> ...



Via PHP kannst du dann auf xyz zugreifen


----------



## Kendoo (29. November 2007)

Hallo,
so wie Du es jetzt geschrieben hast, hatte ich es ja von Anfang an, nur dann ist der Wert von 'xyz' immer 1. Deswegen bin ich auf die zwei weiteren Abfragen gekommen, um mit mysql_num_rows die Werte zu bekommen. Mit einem COUNT in der Abfrage wird es ohnehin nicht funktionieren, denn ich brauch ja im Grunde die Anzahl der Geräte pro Gruppe Hauptkategorie (main_category) und getrennt die Anzahl der Geräte dann pro Gruppe Unterkategorie (auxiliary_category).
Ich dachte, dass es eventuell mit mehren SELECTS in der Abfrage machbar ist, nur da fehlen mir halt die weitreichenden Kenntnisse zu SQL Abfragen. .

Kendoo


----------



## Admi (29. November 2007)

Nein, du wirst wahrscheinlich die backticks vergessen haben. Bei count ( * ) as `xyz`  wird ja der Spalte lediglich eine Assoziation gegeben. Das sich daraus ergebende Array kannst du ja via PHP auswerten.


----------



## Kendoo (29. November 2007)

Also meine Abfrage sieht jetzt so aus:


```
<?php $select = mysql_query("SELECT count(*) as xyz, main_category, auxiliary_category FROM ".$table_angebot." GROUP BY main_category, id ORDER BY main_category, auxiliary_category ASC") OR die (mysql_error());
while($res = mysql_fetch_array($select)){
```

dann müsste jetzt also in $res['xyz'] der entsprechende Wert stehen?
Tut er aber nicht! 

Kendoo


----------



## Admi (29. November 2007)

Was kommt denn so raus?


```
<?php $select = mysql_query("SELECT count( * ) as `xyz`, main_category, auxiliary_category FROM ".$table_angebot." GROUP BY main_category, id ORDER BY main_category, auxiliary_category ASC") OR die (mysql_error()); 
$res = mysql_fetch_array($select);
var_dump($res);
```


----------



## Kendoo (30. November 2007)

Das sieht dann so aus:

```
array(6) {
  [0]=>
  string(1) "1"
  ["xyz"]=>
  string(1) "1"
  [1]=>
  string(6) "Bagger"
  ["main_category"]=>
  string(6) "Bagger"
  [2]=>
  string(12) "Kettenbagger"
  ["auxiliary_category"]=>
  string(12) "Kettenbagger"
}
```

Dort kommt also nur eine 1.
Stehen müsste da aber eine 18 für die Hauptkategorie "Bagger" und eine 4 für die Unterkategorie "Kettenbagger"

Kendoo


----------



## Kendoo (5. Dezember 2007)

Keiner Ahnung?


----------

