Die SQL ORDER BY Clause
Geschrieben von: Christian Holm In manchen Fällen ist es nicht nur wichtig die Daten einer Datenbank zu filtern, sondern auch nach bestimmten Kriterien zu sortieren. Bei Verwendung einer ASP Seite und ADO, geschieht dies am einfachsten und schnellsten mit der SQL ORDER BY Clause. Anhand von einfachen Beispielen zeigt dieser Artikel die programmatische Durchführung. Wenn Sie den Beispiel-Sourcecode selbst ausprobieren möchten, so benötigen Sie Microsoft SQL Server 7.0 (oder höher). Die Beispiele verwenden die folgende Zugangsberechtigung: uid=sa; pwd=;. Als Beispieldatenbank habe ich die Northwind Datenbank herangezogen. Diese ist standardmäßig in den Beispieldatenbanken des SQL Servers enthalten. Wenn die SQL Server Datenbank nicht auf dem lokalen Computer (dem Webserver) installiert ist, so müssen Sie zusätzlich den Data Source Parameter im Connection-String auf den Namen (oder die IP Adresse) des Datenbankservers ändern. Die Sortierung von DatensätztenDa man bei einer Datenbankabfrage normalerweise ein SQL-Statement verwendet, bietet es sich an, den SQL String einfach zu erweitern. Um also Datensätze sortieren zu können, gibt es in SQL die sogenannte ORDER BY Clause, und das sieht generell wie folgt aus:
' SQL Statement(s) bzw. dazugehörige Clauses ORDER BY Feld1 Reihenfolge(,Feld2 Reihenfolge)(, ...)Mit Feld1, Feld2, etc. geben Sie die Felder an, nach denen Sie sortieren möchten. Bei den Feldern handelt es sich in einer Datenbank um die Datenspalten. Durch die optionale Angabe der Reihenfolge sortieren Sie die Datensätze entweder in aufsteigender oder absteigender Reihenfolge. Aufsteigend bedeudet, daß Buchstaben von A bis Z, und Zahlen von 0 bis 9 sortiert werden. Die aufsteigende Reihenfolge wird explizit durch den Ausdruck ASC (ascending) angegeben. Da aber die standardmäßige Einstellung der Sortierreihenfolge auch aufsteigend ist, kann der Ausdruck auch weggelassen werden. Um die Datensätze absteigend - Buchstaben von Z bis A, und Zahlen von 9 bis 0 - zu sortieren geben Sie den Ausdruck DESC (descending) an. Wie zuvor erwähnt, fügt man also das Statement einfach dem SQL-String hinzu. Das nun folgende Beispiel soll dies nun demonstrieren. Einfache SortierungFür dieses Beispiel habe ich die Products Tabelle der Northwind Datenbank herangezogen. Mit der ORDER BY Clause lasse ich mir die angeforderten Datensätze aufsteigend alphabetisch sortieren. Die WHERE Clause des SQL-Strings dient nur dazu, um die Anzahl der zurückgelieferten Datensätze auf ein erträgliches Maß zu limiteren. Da dies ja nur ein Vorzeigebeispiel sein soll, reicht es, nur eine handvoll Daten auszulesen. Hier nun der gesamte Sourcecode des Beispiels (orderby_simple.asp):
<% @LANGUAGE = VBScript %> <% Option Explicit Dim objConn, objRS Dim strConn, strSQL Set objConn = Server.CreateObject("ADODB.Connection") strConn = "DSN=Northwind;UID=sa; PWD=;" objConn.Open strConn Set objRS = Server.CreateObject("ADODB.Recordset") Set objRS.ActiveConnection = objConn strSQL ="SELECT Products.ProductName, Products.UnitPrice " strSQL = strSQL & "FROM Products " strSQL = strSQL & "WHERE Products.UnitPrice <= $15 " strSQL = strSQL & "ORDER BY Products.ProductName ASC" objRS.Open strSQL Response.Write "<table cellspacing=2 cellpadding=2 border=2>" Response.Write "<th>Produkt Name</th><th>Preis (USD)</th>" While Not objRS.EOF Response.Write "<tr>" Response.Write "<td>" & objRS("ProductName") & "</td><td> " Response.Write objRS("UnitPrice") & "</td>" Response.Write "</tr>" objRS.MoveNext Wend Response.Write "</table>" objRS.Close objConn.Close Set objRS = Nothing Set objConn = Nothing %> Nach Angabe der verwendeten Skriptsprache folgt die Deklaration der benötigten Variablen. Die Deklaration der Variablen strConn, strSQL ist natürlich optional, da Sie ja die jeweiligen Informationen direkt bei den Objekten angeben können. Wenn Sie jedoch diese trotzdem deklarieren, wird der Sourcecode flexibler. Nun können wir mit Hilfe von Server.CreateObject das Connection Objekt erstellen. Dann defineren wir den Connection String (strConn), der die nötigen Informationen für die Datenbankverbindung enthält. Nicht zu vergessen ist dabei die vorherige Erstellung eines DSNs (Data Source Name) für die Northwind-Datenbank, falls man über ODBC aud die Datenbank zugreifen möchte. Dies erledigen Sie am einfachsten im ODBC (Open Database Connectivity) Data Source Administrator, wo Sie einen System DSN erstellen. Um die Verbindung zur Datenbank zu öffnen, verwenden wir die Open Methode des Objektes, und geben als Parameter den Connection String (strConn), welcher die Verbindungsinformationen enthält, an. Wir erstellen nun das Recordset Objekt und weisen es der aktiven Verbindung zur Datenbank zu (Set objRS.ActiveConnection = objConn). Jetzt erstellen wir die SQL Abfrage, welche die ORDER BY Clause enthält. Diese Abfrage weisen wir dem strSQL String zu. Um die SQL-Abfrage gegen die Datenbank auszuführen zu können, verwenden wir die Open Methode des erstellten Recordset Objektes. Als Property geben wir den SQL-String an. Um das Resultat optisch etwas aufzubessern, schreibe ich die erhaltenen Datensätze in einen HTML Table. Da immer nur ein Recordset zurückgegeben wird, muß der Vorgang mit einer WHILE Schleife bis zum letzten Datensatz wiederholt werden. Um den Datensatz-Cursor zum nächstfolgenden Datensatz weiter zu bewegen, verwenden wir die MoveNext Methode des Objektes. Abschließend geben wir die nicht mehr benötigten Serverresourcen wieder frei, indem wir die Close Methode der jeweiligen Objekte verwenden. Dann zerstören wir die beiden Objekte mit Set ... = Nothing. Das Resultat sieht dann im Browser folgendermaßen aus: Mehrfach SortierungenDamit die ORDER BY Clause auch komplexeren Ansprüchen genügt, kann man mehrere Felder zur Sortierung angeben. Im abschließenden Beispiel (orderby_2Args.asp) habe ich den Stückpreis (UnitPrice) absteigend und den Produktnamen (ProductName) aufsteigend sortieren lassen. Da ich der Einfachheit halber den Sourcecode bis auf das SQL-Statement im Vergleich zum vorigen Beispiel unverändert gelassen habe, führe ich hier nur das SQL-Statement an:
... strSQL ="SELECT Products.ProductID, Products.ProductName, Products.UnitPrice " strSQL = strSQL & "FROM Products " strSQL = strSQL & "WHERE Products.UnitPrice <= $15 " strSQL = strSQL & "ORDER BY Products.UnitPrice DESC, Products.ProductName" ... Der Unterschied macht sich bemerkbar, wie der folgende Screenshot beweist: SchlußbemerkungMit Hilfe der ORDER BY SQL-Clause kann man einfach und schnell Datensätze einer SQL-Abfrage sortieren. Zugegeben, die Möglichkeiten sind beschränkt auf auf- bzw. absteigend, aber durch Angabe mehrerer Felder im Statement, lassen sich die Möglichkeiten der Anwendung erweitern. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
ADO und ASP - Datenbanken einmal näher betrachtet Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |