MySQL – Sortierung in UNION Statements

Heute sind meine Frau und ich über ein kleines My-SQL-Problem gestolpert. Wir hatten ein Statement der Art

( SELECT …. ORDER BY …) UNION (SELECT ….. ORDER BY … )

Wir waren beide der Meinung, dass das zusammengesetzte Ergebnis pro Einzelresultset die jeweils gewünschte Sortierung aufweisen würde. Das war aber leider nicht der Fall !

Dabei hatten wir bereits früher ähnliche Statements verwendet, in denen die Sortierung funktionierte! Wir hatten jedoch eine bedeutsame Kleinigkeit übersehen. Unsere früheren Statements waren nämlich von der Art:

( SELECT …. ORDER BY … LIMIT .. ) UNION (SELECT ….. ORDER BY … LIMIT …. )

Der Unterschied liegt in der Vorgabe von LIMIT, also der Begrenzung der jeweiligen Teil-Resultsets im UNION-Statement. Wir haben dann ein wenig herumprobiert und herausgefunden, dass eine LIMIT-Vorgabe tatsächlich erforderlich ist, wenn beide (oder mehrere) Resultsets separat sortiert und danach zum Union-Resultset zusammengefügt werden sollen.

Offenbar ignoriert der MySQL-Optimizer die ORDER-Statements der Teil-Selects, wenn die einzelnen Resultsets nicht explizit begrenzt werden.

Somit stehen einem wohl zwei Arten zur Verfügung, wei man ein UNION-Resultset ordnen kann:

  • Variante 1 – separate Sortierung der Einzel-Resultsets :

        ( SELECT …. ORDER BY … LIMIT … ) UNION (SELECT ….. ORDER BY … LIMIT … )

  • Variante 2 – Sortierung des Gesamt-Resultsets :

        ( SELECT …. ) UNION (SELECT …. ) ORDER BY ….

Hinweise:
Die Klammerung ist mindestens im zweiten Beispiel von ausschlaggebender Bedeutung.
Klar auch, dass dabei die Felder der Einzel-Selects identisch sein sollten.

Links:
In einigen MySQL-Foren findet man tatsächlich auch entsprechende Hinweise. Man sollte da doch öfter mal reinschauen:

http://www.mysqlfaqs.net/mysql-faqs/Funtions-and-Operators/How-does-union-work-in-MySQL
http://forums.mysql.com/read.php?10,412000,412000

Buchempfehlungen zu CSS2

Gestern fragte mich ein Bekannter, welche Bücher ich ihm für eine Einarbeitung in CSS2 empfehlen könne. Wichtig war ihm auch, dass auf praxisnahe Aufgabenstellungen eingegangen wird. Vielleicht interessiert meine Empfehlung auch andere:

Ich empfehle

  • als Basis: “Cascading Style Sheets”, Eric A. Meyer, O’Reilly (das
    Referenzwerk zum Einsteigen und Nachschlagen vom Guru)
  • für das Erlernen grundlegender Design-Tricks: “CSS Mastery”, A. Budd, C.Moll, S. Collison,
    Addison-Wesley (ein sehr gutes Buch)
  • zur Vertiefung: “Fortgeschrittene CSS-Techniken”, I. Chao, C. Rudel, Galileo
    Computing (ein sehr gutes Buch, teilweise Überlapp mit CSS Mastery, aber
    aktueller, mit vielen interessanten Details und nützlichen Hinweisen zu Browserunterschieden)
  • ergänzend: “Eric Meyer on CSS”, E.A.Meyer, New Riders (Fallstudien von
    E.Meyer)

Ich habe die Bücher selbst und nutze Sie immer wieder gerne.