Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Die SQL ORDER BY Clause

Geschrieben von: Christian Holm
Kategorie: Datenbank

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ätzten

Da 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 Sortierung

Fü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 Sortierungen

Damit 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ßbemerkung

Mit 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 Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

ADO und ASP - Datenbanken einmal näher betrachtet
Benutzerverwaltung leicht gemacht: Teil 1
Der SQL UNION Operator
Eigenschaften der Connection und Recordset Objekte
Ein einfacher Query Analyzer
Eine kleine Bilddatenbank, Teil 1
Intelligente Meta-Tags
ODBC und ASP - Eine DSN zur Verwendung mit ASP definieren
Optimiertes Erstellen von DropDowns
Stored Procedures einfach erstellt
T-SQL Clauses: GROUP BY und HAVING

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.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.