Hallo,
auf die Gefahr hin, in eine peinliche Falle zu tappen - ich habe damit gestern auch schon Zaphod befragt und wollte es der Allgemeinheit nochmal zur Frage stellen. Vielleicht weiss jemand ja etwas:
Ich habe ein Problem mit folgendem Befehl:
Meine Tabelle hat folgende Felder:
Name (Varchar) Nachname (Varchar) Inhalt (text)
Ok. Somit kann ich folgenden Befehl nicht verwenden:
select * from tabelle group by nachname;
Ich habe nur 2 Möglichkeiten: Entweder ich ändere den Befehl in:
select nachname from tabelle group by nachname
oder ich entferne Inhalt (text) ..... beides gemeinsam kombiniert geht nicht. Es hat schon ewig gedauert, bis ich den Fehler eingegrenzt hatte, weiss mittlerweile dass wirklich das TEXT Feld verantwortlich dafür ist, dass gruppierung nicht geht.
Keine Ahnung wieso....wer kann mir da helfen ?
Hängt es an meiner MySQL Version? Das ist die Version 4.0.18. Seltsamerweise akzeptieren einige Entwicklungsumgebungen diesen Befehl, meine eigene unter Windows tut dies nicht. Ich habe PHP bzw. MySQL mehrmals neu installiert, auch verschiedene Versionen getestet, der Fehler, wenns denn einer ist, tritt bei mir dennoch immer wieder auf.
Ich stehe derzeit auf dem Schlauch
Homepage selbermachen 7.852 Themen, 35.619 Beiträge
Hallo.
Mich wundert eigentlich eher gesagt, DASS die Syntax select * from funktioniert. Denn eigentlich ist dieser Befehl in Kombination mit GROUP BY falsch. Zumindest belegen dies einige Quellen meiner Bücher und Tutorials.
Denn nimm die Logik einmal auseinander: Was möchtest du erreichen? Werte ausser dem gruppierten Feld kannst du nicht ausgeben. Die sind schliesslich gruppiert worden:
"....Versuche, den Unterschied zu den sonstigen anderen Select Abfragen zu verdeutlichen. Die EInträge der Ergebnistabelle stehen nicht mehr für bestimmte Datensätze, die zu einer Gruppe, gehören. Somit kannst du die Feldliste auch nicht mehr beliebig mit * erweitern oder alle ausgeben. Wenn du beispielsweise 20 Artikelgruppen hast, können diese bei der Ergebnistabelle dann auch max. 20 Äusgaben mit sich bringen, unter diesen jedoch können Tausende von Datensätzen sein. SQL wüsste also nicht, wie es du den Nachnamen auch noch unterbringen willst. Rein logisch geht das also nicht....."
Somit wundert es mich eher, dass dein SQL diesen Fehler so durchgehen lässt, sicher kannst du es dir anzeigen lassen, verwerten kannst du es allerdings nicht. Somit MUSS die Syntax korrekt lauten: select feld from tabelle group by feld.
Noch ein Beispiel:
P.S. Lasse mich gern vom Gegenteil überzeugen
GROUP BY funktioniert nur in Verbindung mit Datensatzübergreifenden Funktionen (Sum, Max, Avg etc). Sind diese Funktionen nicht vorhanden, ist GROUP BY folgen- und sinnlos.
GROUP BY gruppiert die Datensätze vor dem Ausführen der Funktion, um die Funktion nur innerhalb dieser Gruppen auszuführen.
ORDER BY sortiert die Felder entsprechend Deinen Angaben.
Falls vorhanden, schau Dir die Nordwind.mdb (in Microsoft Office und Microsoft Visual Studio enthalten) an, dort sind Beispiel für GROUP BY zu finden.