homer: teach me (phpmyadmin please)

Ich fange gerade an mir eine DB anzulegen mit phpMyAdmin.
Alles ganz klein. Nur das dargestellt was für meine Frage wichtig ist:

Feld               Typ                 Funktion                Wert
---------------------------------------------------------------------Wert1a        BIGINT                                            200
Wert1b        BIGINT                                            200
Wert2a        BIGINT                                            200
Wert2b        BIGINT                                            200
Wert3a        BIGINT                                            200
Wert3b        BIGINT                                            200
SummeA        BIGINT                   ???                     NULL
SummeB        BIGINT                   ???                     NULL

---------------------------------------------------------------------

Die Werte wurden über ein Formular mit PHP eingetragen

Welche Funktion bewirkt, dass im Feld "SummeA" automatisch die Summe
der Felder Wert 1a, Wert 2a, Wert 3a eingetragen wird und bei "SummeB" die Summe der Felder Wert 1b, Wert 2b, Wert 3b.

Ich habe es mit "SUM" probiert, doch dann erscheint

MySQL meldet:
Invalid use of group function

Oder muss ich das im Formular, wo die Daten eingetragen werden mit
<input type="hidden"> Felder machen, wo die Summe in einer
function summe() errechnet werden und in die Felder eingetragen werden ?

  1. Welche Funktion bewirkt, dass im Feld "SummeA" automatisch die Summe
    der Felder Wert 1a, Wert 2a, Wert 3a eingetragen wird und bei "SummeB" die Summe der Felder Wert 1b, Wert 2b, Wert 3b.

    Laß MySQL bei der Abfrage die Summe ausrechnen:
    SELECT wert1a,wert2a,wert3a,(wert1a+wert2a+wert3a) AS summe FROM tabelle

    Ich habe es mit "SUM" probiert, doch dann erscheint

    Die Funktion SUM addiert die Werte Spaltenweise, also zum Beispiel alle Eintrage in wert1a. Als Resultat erhälst du dann nur noch EINE Ausgabezeile mit eben der Summe (sofern du richtig gruppiert hast). Aber es addiert nicht die einzelne Zeile. Das macht mySQL eben so, wie oben gesagt.

    Du brauchst übrigens bei dieser Variante keine Spalten für die Summen, sondern kannst beliebige Summen direkt durch deine Abfrage mit SELECT definieren und ihnen mit "AS spaltenname" auch einen schöneren Namen zuweisen.

    Wenn Performance ein Problem ist, dann solltest du natürlich vorher irgendwie rechnen (vor allem kompliziertere Formeln), und nicht bei jeder einzelnen Abfrage:

    Zum Beispiel kann PHP beim Eintragen in die Datenbank schon die Summe ausrechnen.

    Oder du läßt folgendes SQL-Statement auf die Datenbank los:

    UPDATE tabellenname SET summenspalte=zelle1+zelle2+zelle3... (WHERE bedingung)

    Das rechnet dann eine Weile durch und liefert auch Summen.

    In diesen beiden Fällen ist es notwendig, eine Spalte für die Summe in der Tabelle anzulegen.

    MySQL meldet:
    Invalid use of group function

    Daß SUM falsch ist, hab ich schon gesagt.

    Die Fehlermeldung kommt daher, daß kein "GROUP BY spaltenname" angegeben wurde. Beispielsweise könntest du 'SELECT *,SUM(wert1a) FROM tabelle GROUP BY wert1a' befehlen. Dann werden alle Zeilen, in denen der gleiche Wert für "wert1a" steht, zusammengefaßt, und alle Zeilen solch einer Gruppe werden dann addiert in der Summenspalte angezeigt. Sowas ist recht sinnlos, wenn in 'wert1a' lauter verschiedene Zahlen stehen, aber keine doppelten.

    Probiere einfach mal ein wenig mit phpMyAdmin rum, damit kann man sehr komfortabel arbeiten. :)

    Oder muss ich das im Formular, wo die Daten eingetragen werden mit
    <input type="hidden"> Felder machen, wo die Summe in einer
    function summe() errechnet werden und in die Felder eingetragen werden ?

    Unnötiger Aufwand auf clientseite, der bei ausgeschaltetem Javascript nicht funktioniert. Außerdem sind Daten von Usern immer als "böse" zu behandeln. Was ist, wenn der User falsch rechnet? Wenn er zum Beispiel eine Bestellung aufgibt, und selbst ausrechnet, welche Summer er zu zahlen hat, die Summe aber einfach halbiert, und du das nicht nachprüfst - dumm, sowas. Lieber selbermachen. ;)

    - Sven Rautenberg