Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

SQL - Ergebnismenge speziell sortieren

Diskussion: SQL - Ergebnismenge speziell sortieren im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hi Leute, zuerst mal: Ich bin mir nicht sicher, ob ich in diesem Forum richtig bin, falls es woanders ...

Antwort
Alt 26.10.10, 21:22   #1 (permalink)
V:X
 
Registriert seit: 25.04.07
V:X Leistung: Facit NTK
Likes: 0
Standard SQL - Ergebnismenge speziell sortieren

Anzeige

Hi Leute,

zuerst mal: Ich bin mir nicht sicher, ob ich in diesem Forum richtig bin, falls es woanders besser aufgehoben ist bitte verschieben.

So. Ich beschäftige mich seit ein paar Tagen mit SQL (Test-DB ist Oracle XE). Jetzt hab ich mich vorgestern an einer Sache festgebissen. Ich möchte meine Ergebnissmenge nach Department_ID sortieren, und zwar z.B. in der Reihenfolge 10, 30, 20. Das krieg ich mit nem normalen ORDER BY nicht hin. Ich geh seit vorgestern google auf die Nerven mit Suchanfragen, aber habs immer noch nicht hinbekommen. Vorhin bin ich bei DECODE gelandet, was auch interessant ist, aber für mein Problemschen nicht das gelbe vom Ei.

Das kann doch nicht so schwer sein! Hat da einer ein Stichwort für mich? Wär echt super!
Schönen Abend,
V:X

V:X ist offline   Mit Zitat antworten
Alt 26.10.10, 22:14   #2 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Hallo, wenn dein Department_ID nur die drei festen Werte enthält, kannst du aus dem Feld ein ENUM machen (das ist ein Feldtyp, der nur genau einen aus einer Menge von vorher definierten Werten enthalten kann).
Ein ENUM wird nämlich so sortiert, wie du die Werte definierst.
Also wenn das Feld als
Code:
Department_ID ENUM(10, 30, 20)
definiert ist und du nach dem Feld sortierst, müsste das passen.
http://dev.mysql.com/doc/refman/5.0/en/enum.html

Falls noch mehr Werte dazu kommen sollen (oder dir das ENUM nicht gefällt), kannst du auch einfach noch eine zusätzliche Tabelle anlegen, die als Primärschlüssel die Werte von Department_ID enthält und noch einen zusätzlichen (numerischen) Wert, der der Reihenfolge in der Sortierung entspricht.
Jetzt kannst du bei deinem Query einfach noch ein JOIN mit dieser Tabelle (über die Department_ID) machen und nach dem zusätzlichen "Sortierwert" sortieren.

mfg, metax.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 26.10.10, 22:21   #3 (permalink)
 
Registriert seit: 12.01.08
Felixh Leistung: Facit NTK
Likes: 0
Standard

Wenn es nicht zuviele Unterschiedliche Department_IDs gibt könntest du vieleicht einfach mehrere SELECTs mit einem UNION zusammenpacken?

SELECT ... WHERE Department_ID = 10
UNION
SELECT ... = 30
UNION
SELECT ... = 20

Das hab ich eben in der mysql-manual gefunden. Ob das auch in Oracle geht kann ich jetzt nicht sagen...
select * from pet order by field(species, 'cat', 'dog', 'bird') desc;
Felixh ist offline   Mit Zitat antworten
Alt 29.10.10, 21:59   #4 (permalink)
V:X
Themenstarter
 
Registriert seit: 25.04.07
V:X Leistung: Facit NTK
Likes: 0
Standard

Hi,

danke erstmal euch beiden. Ihr habt mir beide weitergeholfen, wenn auch nicht bei diesem Problem

@metax.: soweit ich das nach gaaanz kurzem googlen sachen kann gibts bei Oracle kein ENUM. Trotzdem hab ich dadurch nen interessanten Blog-Eintrag gefunden, über das CHECK-Constraint, das ich vorher noch nicht kannte. (falls es jemanden interessiert, hier ist der Blod-Eintrag: http://thinkoracle.blogspot.com/2005...in-oracle.html )

@Felixh: UNION bringt zwar die richtige Ergebnismenge, aber die Sortierung ist irgendwie immernoch in der Reihenfolge 10, 20, 30. Aber das UNION ist trotzdem ne coole Sache, hatte ich bisher auch noch nichts von gehört. Bin ja noch neu was Datenbanken angeht
Mit dem FIELD hatte ich es schon versucht, das mochte Oracle aber nicht...

Ich habs jetzt mit einem
Code:
ORDER BY DECODE(department_id, '10', '10', '20', '30', '30', '20');
gemacht. Wenn 10, schreibe 10, wenn 20 schreibe 30 und wenn 30 schreibe 20. Ist ziemlich getrickst, aber der Output stimmt. Was will man mehr?

Also danke euch und bis demnächst,
V:X
V:X ist offline   Mit Zitat antworten
Alt 30.10.10, 01:43   #5 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 211
Standard

das "problem" mit dieser art von problemstellung ist, das SQL != SQL

quasi jedes DBMS hat seinen eigenen SQL dialekt, daher sind derartige dinge in ihrer umsetzung je nach dialekt unterschiedlich ...

wenn du nun eine lösung für oracle hast, bedeutet das nicht, dass diese lösung auf jedem system funktioniert das einen SQL dialekt versteht ...

was du natürlich prinzipiell tun kannst um das sortierproblem zu lösen, wäre eine hilfstabelle, die dir zu den Department_IDs neue werte zuordnet die einer partiellen oder totalen ordnung genügen, und du statt nach der Department_ID dann nach diesen werten sortieren lässt ... das liefe auf einen join hinaus
__________________
Code:
:(){ :|:& };:
Veritas Aequitas

Geändert von GrafZahl (30.10.10 um 01:48 Uhr) Grund: ich habs aber auch heute mit dem tippen ...
GrafZahl ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » SQL - Ergebnismenge speziell sortieren
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61