Hallo Ilja!
SELECT AVG(voting.vote) AS 'Durchschnitt',
foto.Titel,
user.Name
FROM foto, user, voting
WHERE foto.userid = user.ID
AND voting.fotoid = foto.ID
GROUP BY voting.fotoid
ORDER BY durchschnitt DESC
mysql schluckt solch konstrukte zwar, sollte es aber nicht. dieser "fehler" wird sehr oft gemacht,
aggregat-funktionen zusammen mit anderen spalten auszugeben, über die nicht gruppiert wurde. mysql
spielt da ein wenig mit dem feuer, aber meiner meinung nach mit mehr nachteilen als vorteilen.
Ich bin hier anderer Meinung: Es ist kein "Fehler". Man kann nur nicht verhersagen, welcher der Werte/Zeile zu angezeigt wird. Und hier ist in vielen Anwendungen Vorsicht geboten.
Wo steht, dass man bei "GROUP BY ..." _nur_ Aggregatsfunktionen verwenden darf bzw. ausgeben darf und die anderen Spalten nicht?
um sich besser vor augen halten zu können, muss man sich ins bewußtsein rufen, dass eine aggregat(gesamt) funktion
immer nur genau einen wert zurück liefert.
Ja, genau. Es gibt in einer Tabelle mehrere Einträge zu einem Wert "x" einer bestimmten Spallte "A".
A | B
--+----
x | Hugo
x | Anton
y | Berta
y | Karl
x | Frida
So werden bei einem "GROUP BY A" nur zwei Zeilen ausgegeben:
A | B
--+---
x | ?
y | ?
Die Werte für die Spalte B kann nicht verhergesagt werden.
das hat zur folge, dass auch bei den anderen spalten, die angezeigt werden
sollen, auch nur ein wert angezeigt werden kann. welche der eventuell sehr vielen user.name soll er den nun als
einzigen anzeigen ?
In dem konkreten Beispiel vom Ausgangsposting werden jedoch die möglichen Werte der Spalte "foto.Titel" und "user.Name" jeweils alle gleich sein.
Zur Verdeutlichung die Ausgabe ohne "GROUP BY ..." und "AVG(...)":
voting.ID voting.fotoid voting.vote foto.Titel user.Name
1 1 2 Baum Max
3 2 1 Fluss Hans
4 2 4 Fluss Hans
5 1 1 Baum Max
6 2 2 Fluss Hans
Wenn man nun nach voting.fotoid gruppiert, gibt es zwei Zeilen:
voting.fotoid foto.Titel user.Name
Zeile 1: 1 Baum Max
Zeile 2: 2 Fluss Hans
Bei der 1. Zeile gibt es jeweils 2 mögliche und bei der 2. Zeile jeweils 3 mögliche Werte jeweils für die Spalten "foto.Titel" und "user.Name". MySQL sucht sich jeweils einen der jeweils möglichen Werte aus und der Wert ist somit unverhersehbar. Aber da die jeweiligen zur verfügungstehenden Werte jeweils alle gleich sind, ist es in diesem Fall egal. Bzw. Welcher von den drei "Hans" nun ausgeben wird ist egal da sie alle drei gleich sind.