Sven Rautenberg: teach me (phpmyadmin please)

Beitrag lesen

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