Infos

Sie befinden sich in den Archiven der Kategorie LAMP / Webentwicklung.

Calendar
Februar 2012
M D M D F S S
« Jan    
 12345
6789101112
13141516171819
20212223242526
272829  

Archiv der Kategorie LAMP / Webentwicklung

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.

PHP-Unterstützung unter Eclipse Indigo

Da es z.Z. kein Paket gibt, dass einem eine direkte Installation einer PHP-Entwicklungsumgebung unter dem neuen Eclipse “Indigo” ermöglichen würde, ist ein wenig Handarbeit erforderlich.

Ich beziehe mich nachfolgend auf die Hinweise von “aaronbonner” auf der Webseite http://aaronbonner.tumblr.com/post/6035060125/installing-pdt-3-on-eclipse-3-7-indigo.

Die aktuelle Eclipse-Indigo-Version holt man sich von http://www.eclipse.org/downloads/.

Dort lädt man sich das Paket “Eclipse Classic 3.7″ (in meinem Fall für 64Bit Linux) herunter und “installiert” das Paket in seinem Wunschverzeichnis durch entsprechendes Expandieren des Tar-Balls (z.B. mit ark).

Nun gilt es zunächst, Eclipse die erforderlichen Update-Sites bekannt zu machen. Wir wechseln daher über den Menüpunkt

“Help >> Install New Software … ”

auf die Seite “Available Software”. Hier klicken wir auf den Link “Available Software Sites” und fügen folgende Repository-Sites hinzu:

  • Indigo >> “http://download.eclipse.org/releases/indigo”
  • The Eclipse Project Updates >> “The Eclipse Project Updates”
  • PDT 3.0 Update Site >> “http://download.eclipse.org/tools/pdt/updates/3.0/milestones”
  • Subversive Site >> “http://community.polarion.com/projects/subversive/download/eclipse/2.0/indigo-site/”
  • Subversive Update Site >> “http://community.polarion.com/projects/subversive/download/integrations/update-site”
  • Subversive Integrations >> “http://community.polarion.com/projects/subversive/download/integrations/update-site”
  • Subversive SVN Connectors >> “http://community.polarion.com/projects/subversive/download/integrations/update-site”
  • WTP-Patches >> “http://download.eclipse.org/webtools/patches/drops/R3.1.2/P-3.1.2-20100413200422/repository/wtp-patches312-tests”

Wie man die Sites benennt, ist dabei jedem selber überlassen. Hauptsache die http-Adressen stimmen.

Danach installiert man sich die benötigten Pakete - in meinem Fall :

  • Eclipse Web Developer Tools
  • Eclipse XML Editors and Tools
  • Eclipse XSL Developer Tools
  • JavaScript Development Tools
  • JAX-WS DOM Tools
  • JAX-WS Tools
  • Native JavaHL 1.5 Implementation
  • Native JavaHL 1.6 Implementation
  • PHP Development Tools (PDT) Runtime Feature
  • PHP Development Tools (PDT) All-In-One SDK
  • PHP Development Tools (PDT) SDK Feature
  • PHP Development Tools (PDT) Source Feature
  • Remote System Explorer End-User Runtime
  • Subversion Revision graph
  • Subversive SVN Connectors
  • Subversive SVN JDT Ignoe Extensions
  • Subversive SVN Team Provider
  • Subversive SVN Team Provider Connectors Sources
  • SVNKit 1.2.2
  • SVNKit 1.3.3
  • SVNKit 1.3.5
  • Web Page Editor
  • WST Server Adapters
  • Axis2-Tools
  • Dynamic Languages Toolkit - Mylyn Integration
  • JST Server Adapters
  • JST Server UI
  • Mylyn Commons
  • Mylyn Context Connector: Eclipse IDE
  • Mylyn SDK
  • Mylyn Task List
  • Mylyn Task-Focused Interface
  • PDT Mylyn Feature
  • Subversive SVN Integration for the Mylyn Project
  • Target Management Terminal

Am wichtigsten sind hier natürlich die PDT-Pakete. Für die SVN-Anbindung sind die Subversion-Pakete und Konnektoren wichtig. Wer Task-orientiert arbeiten will, sollte auf die Mylyn-Pakete zurückgreifen.

Viel Spass dann mit Eclipse Indigo und der zugehörigen PHP-Unterstützung !