Mailinglisten-Archive |
Nico Haase schrieb: > > Wenn Du noch weißt, dass Du bei ORDER BY auch berechnete Ausdrücke > > wie MAX(...) verwenden kannst, ist das die Lösung. > > Das mag ganz nett sein, aber: > > SELECT buchnr, vorschlag, titel, vorname, autor, LENGTH( CONCAT( > beschreibung, fazit ) ) AS laenge FROM buecher GROUP BY vorschlag > ORDER BY max( laenge ) DESC; > > MySQL meldet: #1111 - Falsche Verwendung der GROUP-Funktion. Folglich list Du gleich im Handbuch, wie das mit GROUP BY genau geht und findest 13.9.3 GROUP BY with Hidden Fields http://www.mysql.com/doc/en/GROUP-BY-hidden-fields.html Und dort steht eine Lösung für Dein Problem und sogar der Verweis auf eine ausführlichere Beschreibung :-) 3.6.4 The Rows Holding the Group-wise Maximum of a Certain Field http://www.mysql.com/doc/en/example-Maximum-column-group-row.html bzw. 4.5.4 Die Zeilen, die das gruppenweise Maximum eines bestimmten Felds enthalten http://www.mysql.com/doc/de/example-Maximum-column-group-row.html Sorry, dass ich Dich nicht gleich dorthin verwiesen habe; ich hatte die Gruppierung in Deinem Problem überlesen ... Den Max-Concat-Trick hab' übrigens ich damals zum Handbuch bei- gesteuert :) Effizienter, wenn auch auf den ersten Blick nicht so schön, ist aber die Version mit einer temporären Tabelle. Konkret sieht das dann so aus: CREATE TEMPORARY TABLE tmp ( autor VARCHAR(255), laenger INT ); LOCK TABLES buecher; INSERT INTO tmp SELECT autor, MAX(LENGTH(beschreibung)+LENGTH(fazit)) FROM buecher GROUP BY vorschlag; SELECT b.buchnr, b.vorschlag, b.titel, b.vorname, b.autor, b.laenge FROM buecher AS b, tmp as t WHERE b.autor = t.autor AND MAX(LENGTH(b.beschreibung)+LENGTH(b.fazit)) = t.laenge; UNLOCK TABLES; DROP TABLE tmp; Das ist letztendlich, was ein DBMS intern bei Subqueries machen würde. Immerhin hast Du so nur 6 Queries auszuführen, statt für jeden Autor eine. Ciao, Martin PS: Alles trocken getippt ohnen Test, also ohne Gewähr ... In der tmp-Tabelle musst Du natürlich die zu Deinen Spalten passenden Typen verwenden!
php::bar PHP Wiki - Listenarchive