SQL-Ergebnisse beim Sortieren ausschließen
Frank
- php
0 Vinzenz Mai0 Tobias Kloth1 dedlfix
Hallo zusammen!
Ich hab folgendes Problem: ich habe eine Tabelle mit einem Fremdschlüssel, der allerdings nicht zwangsläufig belegt ist, z.B.
PK Name FK
1 bla 47
2 ho 11
3 aha 0
Das Feld hat das Format Integer, ist also automatisch "0", wenn nix drinsteht.
Jetzt will ich die Datensätze aufsteigend nach FK sortieren und es nervt, dass da am Anfang natürlich immer die mit "0" stehen.
Ich hätte gerne eine Sortierung, die wie folgt aussieht:
PK Name FK
2 ho 11
1 bla 47
3 aha 0
Hat irgendjemand eine Idee, wie ich das hinbekommen könnte?
Hallo Frank,
PK Name FK
1 bla 47
2 ho 11
3 aha 0Das Feld hat das Format Integer, ist also automatisch "0", wenn nix drinsteht.
Wenn nichts drinsteht, steht der spezielle Wert NULL in einem Datenbankfeld. Wenn 0 drin steht, steht die Zahl 0 drin; diese Zahl ist etwas ganz anderes als der NULL-Wert und mit beidem wird unterschiedlich umgegangen.
Jetzt will ich die Datensätze aufsteigend nach FK sortieren und es nervt, dass da am Anfang natürlich immer die mit "0" stehen.
PK Name FK
2 ho 11
1 bla 47
3 aha 0
Welches Datenbankmanagementsystem verwendest Du? Bitte auch die Version angeben. Davon dürfte es abhängen, wie Du Dein Sortierproblem lösen kannst. Eine einfache Möglichkeit wäre die Verwendung von zwei SELECT-Statements (einmal die Werte mit Eintrag im Feld, einmal die Werte ohne Eintrag), einer weiteren Spalte mit zwei verschiedenen Werten für die beiden SELECT-Statements. Verknüpfe die Ergebnismengen mit UNION, sortiere erst nach dieser weiteren Spalte, dann nach FK. Bei MySQL benötigst Du somit mindestens die Version 4.0.
Freundliche Grüße
Vinzenz
Hallo Frank,
Ich hab folgendes Problem: ich habe eine Tabelle mit einem Fremdschlüssel, der allerdings nicht zwangsläufig belegt ist, z.B.
dazu schrieb Vinzenz ja bereits, dass hier NULL geeigneter wäre.
Jetzt will ich die Datensätze aufsteigend nach FK sortieren und es nervt, dass da am Anfang natürlich immer die mit "0" stehen.
Du hat nicht geschrieben, welches DBMS du verwendest, aber wenn es IF() unterstützt (kann das außer MySQL überhaupt noch ein DBMS?), könntest du sowas verwenden:
SELECT pk, name, fk, IF(fk=0,2,1) as sort FROM tabelle ORDER BY sort, fk
In der Spalte sort steht dann bei den Zeilen mit fk=0 eine 2 drin und bei allen anderen eine 1 - durch die Sortierung nach sort werden die unerwünschten Zeilen dann nach unten geschoben.
Grüße aus Nürnberg
Tobias
echo $begrüßung;
Du hat nicht geschrieben, welches DBMS du verwendest, aber wenn es IF() unterstützt (kann das außer MySQL überhaupt noch ein DBMS?), [...]
Warum nicht? Oracle beispielsweise bietet DECODE() und CASE...WHEN...ELSE und vielleicht auch noch COALESCE() und NULLIF(), siehe http://www.techonthenet.com/oracle/functions/decode.php und http://www.databasejournal.com/features/oracle/article.php/3344871 und folgende Seite
Und auch PostgreSQL hat da was im Angebot: http://www.postgresql.org/docs/8.1/static/functions-conditional.html
und SQLite http://www.sqlite.org/lang_expr.html
und Informix (mindestens CASE...WHEN...ELSE)
usw. usf.
echo "$verabschiedung $name";
Hallo dedlfix,
Du hat nicht geschrieben, welches DBMS du verwendest, aber wenn es IF() unterstützt (kann das außer MySQL überhaupt noch ein DBMS?), [...]
Warum nicht?
Ich bin nicht davon ausgegangen, dass kein anderes DBMS sowas kennt - ich wusste nur nicht. Aber danke für die Hinweise - jetzt weiß ich, dass andere DBMS das durchaus können.
Grüße aus Nürnberg
Tobias