schildi: Datensätze zählen

Hallo zusammen,

in eine mySQL Datenbank habe ich eine Tabelle mit Schulen, mit den Spalten SCHULNAME, BEZIRK, KLASS1a, KLASSE1b, bis KLASSE2d...

Nun möchte ich die Anzahl der Klassen zählen in denen zwischen 1 und 24 Kinder sind.

Momentan mache ich mehrere Abfragen wie folgt:

SELECT COUNT(klasse_1a) FROM TABLLENNAME WHERE klasse\_1a BETWEEN '1' AND '24'

SELECT COUNT(klasse_1b) FROM TABLLENNAME WHERE klasse\_1b BETWEEN '1' AND '24'

etc...

und Addiere die "Ergebnisse" später mit PHP.

Gibt es eine bessere Lösung in der ich die Anzahl Klassen in einer Summe mit einer Abfrage bekomme?

Über Denkanstöße und Idden wäre ich sehr dankbar.

MfG Jan

  1. Über Denkanstöße und Idden wäre ich sehr dankbar.

      
    SELECT (COUNT(klasse_1a)+COUNT(klasse_1b)) as Summe;
    

    nicht getestet

    1. Hallo,

      danke für deine Antwort,

      SELECT COUNT(klasse_1a)+COUNT(klasse_1b) AS SUMME FROM TABELLENNAME WHERE klasse\_1a BETWEEN '1' AND '24' OR klasse\_1b BETWEEN '1' AND '24'

      "funktioniert" (es kommt keine Fehlermeldung) aber das Ergebnis ist ein anderes als wenn ich die zwei entsprechenden Abfragen einzeln ausführe und dann später addiere...

      Das Ergebnis der einen Abfrage ist größe, soadass ich annehme durch das OR werden Klassen doppelt gezählt, halt die Klassen wo jeweils eine der Bedingungen zutrifft...

      Liege ich mit meiner Vermutung richtig?

  2. moin,

    in eine mySQL Datenbank habe ich eine Tabelle mit Schulen, mit den Spalten SCHULNAME, BEZIRK, KLASS1a, KLASSE1b, bis KLASSE2d...

    die problematik liegt hier schon im design der daten. du solltest die klassen in eine extra tabelle auslagern und mit der tabelle schule über einen fremdschlüssel miteinander in beziehung setzen. ansonsten wirst du immer wieder probleme bekommen, nicht nur was abfragen betrifft, sondern auch dann, wenn bestimmte klassen wegfallen oder hinzukommen.

    aber die entscheidene frage ist, ob die möglichkeit besteht, dein daten-modell zu überarbeiten ?

    Ilja

    1. Hallo,

      leider besteht keine Möglichkeit das Datenbank-Modell zu ändern, das habe ich quasi so bekommen, die Daten sind aber so komplett es werden keine Daten dazukommen oder wegfallen, es geht um eine Auswertung der vorhandenen Daten.

      Gruß Jan

      1. moin,

        leider besteht keine Möglichkeit das Datenbank-Modell zu ändern, das habe ich quasi so bekommen

        "so bekommen" bedeutet nicht, dass man sie auch ändern darf. das ist eine frage der verantwortlichkeiten. ich kann dir nur raten, sie zu ändern.

        die Daten sind aber so komplett es werden keine Daten dazukommen oder wegfallen, es geht um eine Auswertung der vorhandenen Daten.

        hört sich dann mehr nach einem export der daten an und weniger um ein produktivsystem. wie dem auch sein. das erste problem, was du mit diesem design hast, du musst wissen, welche klassen es gibt, weil sie eben in den spalten abgebildet werden. wenn dir die summe alleine reicht, sprich die anzahl der klassen, dann kannst du einfach für alle klassenspalten eine 1 addieren, wennn sie kleiner 25 ist (between muss hier nicht zum einsatz kommen), ansonsten eine 0. dies kannst du entweder mit IF oder CASE anweisung steuern.

        SELECT IF(klasse_1a < 25, 1, 0) + IF(klasse_1b < 25, 1, 0) .......
        FROM klassen
        ;

        Ilja