Sepp-AC: MYSQL Abfrage - COUNT bzw. SUM

Hallo,

ich habe eine MYSQL DB und frage diese wie folgt ab:'

  
$query="SELECT DISTINCT LEFT(plz, 2) bereich, COUNT(LEFT(plz, 2)) anzahl FROM TABELLE WHERE status BETWEEN '1' AND '10' && plz LIKE '".mysql_real_escape_string('0')."%' GROUP BY LEFT(plz, 2) ";  
  
$result=mysql_query($query,$db);  
while ($row = mysql_fetch_assoc($result))  
{  
//Alle Einträge  
$plz_all[$row['bereich']] = $row['anzahl'];  
}  

Nun kann ich mir die Anzahl der Einträge zu einer bestimmten PLZ ausgeben lassen.

  
//PLZ beginnen mit 01  
echo $plz_all[01];  

Nun versuche ich die Abfrage zu erweitern und die Summe der Einträge zu dem PLZ-Bereich beginnend mit "0" zu ermitteln:

  
$query="SELECT DISTINCT LEFT(plz, 2) bereich, COUNT(LEFT(plz, 2)) anzahl, SUM(plz) gesamt FROM TABELLE WHERE status BETWEEN '1' AND '10' && plz LIKE '".mysql_real_escape_string('0')."%' GROUP BY LEFT(plz, 2) ";  

Leider bekomme ich aber kein Ergebnis geliefert-also es wird bei

  
//PLZ gesamt  
echo $row['gesamt'];  

nichts ausgegeben.

Vielen Dank für einen Hinweis

Der Sepp

  1. Hallo Sepp,

    lass dir mal deine Abfrage per echo ausgeben und lass sie mal in phpmyAdmin ausführen, dann weißt du bestimmt mehr.

    Gruß Jonny F.

    1. Hallo Ihr zwei,

      vielen Dank für die Antworten. Die Idee den query in phpmyadmin auszuführen war prima. Aber nun stehe ich wieder auf dem Schlauch.

      Was ich erreichen möchte ist die Anzahl der einzelene PLZ im entsprechenden PLZ-Gebiet addieren.

      Also in PLZ beginnend mit 01 habe ich 45 Einträge.
      Also in PLZ beginnend mit 02 habe ich 25 Einträge.
      Also in PLZ beginnend mit 03 habe ich 32 Einträge.
      ...
      Also in PLZ beginnend mit 09 habe ich 41 Einträge.

      Wie kann ich denn nun die Summe der Einträge direkt im query addieren?

      Beste Grüsse

      Sepp

      1. Hi!

        Was ich erreichen möchte ist die Anzahl der einzelene PLZ im entsprechenden PLZ-Gebiet addieren.

        Du willst also eine Summe über alles. Da musst du entweder eine neue Abfrage erstellen, die ohne Gruppierung zählt oder du erweiterst die Gruppierung um ein WITH ROLLUP.

        Lo!

        1. Hi!

          Was ich erreichen möchte ist die Anzahl der einzelene PLZ im entsprechenden PLZ-Gebiet addieren.

          Du willst also eine Summe über alles. Da musst du entweder eine neue Abfrage erstellen, die ohne Gruppierung zählt oder du erweiterst die Gruppierung um ein WITH ROLLUP.

          Lo!

          Ok-vielen Dank. Dann werde ich wohl eine zweite Abfrage stellen-hatte gehofft dies vermeiden zu können...

          Sepp

          1. Hi!

            Du willst also eine Summe über alles. Da musst du entweder eine neue Abfrage erstellen, die ohne Gruppierung zählt oder du erweiterst die Gruppierung um ein WITH ROLLUP.
            Ok-vielen Dank. Dann werde ich wohl eine zweite Abfrage stellen-hatte gehofft dies vermeiden zu können...

            Warum kannst du das WITH ROLLUP nicht verwenden?

            Lo!

  2. Hi!

    $query="SELECT DISTINCT LEFT(plz, 2) bereich, COUNT(LEFT(plz, 2)) anzahl FROM TABELLE WHERE status BETWEEN '1' AND '10' && plz LIKE '".mysql_real_escape_string('0')."%' GROUP BY LEFT(plz, 2) ";

    Wenn deine Intention zum Konstrukt COUNT(LEFT(plz, 2)) die ist, keine NULL-Werte zu zählen, so reicht COUNT(plz) aus. LEFT() liefert nur dann NULL als Ergebnis, wenn bereits das Ausgangsmaterial NULL ist, insofern kann man auch gleich das Ausgangsmaterial nehmen, ohne den Server mit einer überflüssigen Berechnung zu belasten. Die zu zählenden Werte werden in deinem Fall nicht primär über die Formel eingeschränkt, sondern über die WHERE-Bedingung und die Gruppierung.

    Hast du das mysql_real_escape_string('0') wirklich so im Original-Code stehen? Das wäre nämlich auch unsinnig. Sinnig wäre es hingegen, wenn statt der (hier feststehenden) 0 ein variabler Wert eingefügt wird.

    Nun versuche ich die Abfrage zu erweitern und die Summe der Einträge zu dem PLZ-Bereich beginnend mit "0" zu ermitteln:
    [...] SUM(plz) gesamt [...]
    Leider bekomme ich aber kein Ergebnis geliefert-also es wird bei

    //PLZ gesamt

    echo $row['gesamt'];

    
    > nichts ausgegeben.  
      
    Verwende var\_dump($row['gesamt']), dann bekommst du genauer gesagt, ob es NULL oder ein Leerstring ist. Das error\_reporting steht auch auf E\_ALL (und display\_errors auf on), so dass du nicht irgendeinen anderen Fehler unangezeigt lässt? Warum aber willst du Postleitzahlen addieren?  
      
      
    Lo!