SQL-Abfrage mit ORDER BY

Dey

Banned
Registriert
Mai 2005
Beiträge
1.925
Hallo,

in einer Datenbanktabelle mit dem Titel "Computer" habe ich die Spalten ("IP", "Hostname", "MAC").

Nun habe ich eine SQLConnection aufgebaut und versuche mittels folgender Query eine Sortierung nach Hostnamen durchzufüren:

"Select * FROM Computer ORDER BY Hostname"

Leider funktioniert es nicht. Solange ich ORDER BY weglasse, erhalte ich problemlos die Reihen in unsortierter Reihenfolge.

Kann sich einer erklären, woran es hapert?
 
funktioniert nicht ist keine Fehlermeldung; was genau funktioniert nicht?
 
Code:
SELECT * FROM Computer ORDER BY Hostname ASC
oder
Code:
SELECT * FROM Computer ORDER BY Hostname DESC

lg
 
Oh, wieder was dazu gelernt (:

Schonmal versucht testweise nach der IP zu sortieren?
Wie lautet die genaue Fehlermeldung?
 
Code:
SELECT * FROM Computer ORDER BY 2;

Probiers mal hiermit.
 
Was, wenn du statt "*" einfach die drei Columns auflistest, vielleicht funkt das ja :)
 
Dey schrieb:
"Select * FROM Computer ORDER BY Hostname"

Ist eigentlich richtig. Evtl. noch mit ; am Ende also:

select * from computer order by hostname;

Weiß ja nicht wo genau du den Query einsetzt, aber normal sollte es funktionieren. Eine Fehlermeldung + log, wie die anderen schon gesagt haben, wäre nicht schlecht.
 
Ich habe schon vor der Erstellung des Threads versucht, nach anderen Kriterien zu sortieren oder das Kriterium mittels Spaltenindex anzusprechen, aber vergebens. Nun habe ich einen Try Catch-Block um die Befehle erzeugt und erhalte folgende Exception:

"Die Datentypen 'text', 'ntext' und 'image' können nur mithilfe des Operators IS NULL oder LIKE verglichen oder sortiert werden.

Und hier die LÖSUNG:

"Select * FROM Computer ORDER BY cast(Hostname as varchar(100))"

Nach 'text' kann nicht sortiert werden. Wieder was dazu gelernt (und hoffentlich manch anderer auch) :)

Interessant wäre in diesem Zusammenhang noch. ob man die Textlänge auch in Form einer Variablen statt einem festen Wert (100) in den Befehl schreiben kann.
 
Zuletzt bearbeitet:
warum nimmst du varchar nicht gleich als Typen für Hostname? Dann sollte das auch ohne diese "Konvertierung" funktionieren.
 
Ich weiß nicht ob das eine Lösung sein kann, aber bei mir hatte die Speicherung der IP in die Datenbank immer Probleme gemacht (konnte die Spalte zum Teil nicht auslesen, etc.), bis ich die Funktion ip2long und long2ip gefunden habe.

Vielleicht hilft dir das weiter.

P.S.: http://php.net/manual/de/function.ip2long.php


Lesen sollte man können ;)

Nicht gesehen, dass dein Problem bereits gelöst wurde
 
Zuletzt bearbeitet:
Auch wenns off-topic ist:
Von der Benutzung von ip2long und long2ip sollte man bei neuer Software imo absehen da man in nicht allzu ferner Zukunft dann alles neu machen kann weil die Funktion zum einen keine IPv6 versteht und zum anderen MySQL auch die resultierenden Werte (128 bit) nicht speichern könnte (max. 64bit, k.A. ob andere DBs da mehr können).
Wir haben in der Firma genau das Problem da wir dort an diversen Stellen IPv4 auf 32bit integer umgewandelt haben um damit effizieter zu arbeiten (z.B. Suchabfragen direkt in SQL abwickeln).
 
Gute Information. Danke.
 
Zurück
Oben