mysql + nach mehreren Spalten sortieren
bjacke
- datenbank
0 Vinzenz Mai0 bjacke0 Vinzenz Mai0 Ilja
Hi@all,
ich habe drei Spalten, die ausgewählt werden, wenn sie ein bestimmtes Projekt enthalten.
Das klappt auch. Jetzt habe ich nochmal drei Spalten, in denen Zahlen stehen. Wie bekomme ich das jetzt hin, das das ergebnis nach der Ordnung der Zahlen (aller Spalten) ausgegeben wird.
z.b.
1,2,3
11,0,1
5,8,9
Die gesuchten projekte stehen jetzt z.b. einmal an erster, beim zweiten an zweiter beim dritten an dritter (oder anders).
Ich möchte jetzt, das alle so sortiert werden.
9
0
1
Also über mehrere Spalten hinweg sortieren. Geht das event. mit if, da habe ich aber noch nich herausgefunden, wie man da Befehle einfügen kann?
Also wenn Projkt1=Cubesat, dann merke Zahl1, sonst wenn Projkt2=Cubesat, dann merke Zahl2, sonst wenn Projkt3=Cubesat, dann merke Zahl3
sortiere Zahl1-Zahl3.
Ich hoffe, das war halbwegs verständlich ausgedrückt ;).
Basti
Hallo Basti,
Ich hoffe, das war halbwegs verständlich ausgedrückt ;).
ich fürchte, Deine Hoffnung war vergebens. Ich habe überhaupt nicht verstanden, was Du haben willst.
Wie bekomme ich das jetzt hin, das das ergebnis nach der Ordnung der Zahlen (aller Spalten) ausgegeben wird.
z.b.1,2,3
11,0,1
5,8,9
Normalerweise ist für das Sortieren die ORDER-BY-Klausel verantwortlich. Hast Du die Spalten S1, S2 und S3 und möchtest zuerst nach S2, dann nach S3 und wenn dann noch Gleichheit besteht, nach S1 sortieren so geht dies mit
ORDER BY S2, S3, S1
Ich vermute jedoch, dass Du etwas ganz Anderes möchtest. Ich verstehe bloss nicht was. Ein _ganzes_ Beispiel mit allen Ausgangsdaten (drei, vier Datensätze) und eine ordentliche Erklärung der Ergebnisdaten wäre hilfreich.
Die gesuchten projekte stehen jetzt z.b. einmal an erster, beim zweiten an zweiter beim dritten an dritter (oder anders).
Verstehe ich Dich richtig: Von den Werten in den drei verschiedenen Spalten interessiert Dich nur ein einziger Wert?
Ich möchte jetzt, das alle so sortiert werden.
9
0
1
Wie ergeben sich aus Deinen Ausgangsdaten diese Ergebnisdaten?
9 ist nicht in Zeile 1
0 ist in Zeile 2
1 ist nicht in Zeile 3
9 ist der gesuchte Wert aus Zeile 3, 0 der aus Zeile 2, 1 der aus Zeile 1.
9 ist der größte Wert in Zeile 3, 0 und 1 sind hingegen die kleinsten Werte ihrer Zeilen. Ich sehe kein System.
Warum soll genau diese Reihenfolge kommen, ich sehe kein System.
Also wenn Projkt1=Cubesat, dann merke Zahl1, sonst wenn Projkt2=Cubesat, dann merke Zahl2, sonst wenn Projkt3=Cubesat, dann merke Zahl3
sortiere Zahl1-Zahl3.
Wie kommst Du von der Entsprechung Cubesat = irgendein Projekt zu Deinen Zahlen? Inwiefern sind Deine Zahlen sortiert?
Könntest Du bitte Deine Ausgangstabellen vorstellen, mit ein paar Musterdatensätzen. Anschließend erläutern, wie Deine Ergebnismenge aussehen soll - und welche Kriterien dabei gelten. Nicht in welchen Schritten Du Dir das vorstellst.
Freundliche Grüße
Vinzenz
Dann versuchs ich nochmal ;).
Hier mal der datensatz
VALUES (projekt1, leitung1, projekt2, leitung2, projekt3, leitung3);
-----
VALUES ('Cubesat', 0, '', -1, '', -1);
VALUES ('Cubesat', 0, '', -1, '', -1);
VALUES ('Computer & Homepage', 0, 'Cubesat', 1, '', -1);
VALUES ('Computer & Homepage', 2, 'Cubesat', 1, '', -1);
Ich möchte jetzt, dass die Datensätze in Abhängigkeit von Leitung bezogen Cubesat sortieren, also so:
VALUES ('Computer & Homepage', 2, 'Cubesat', 1, '', -1);
VALUES ('Computer & Homepage', 0, 'Cubesat', 1, '', -1);
VALUES ('Cubesat', 0, '', -1, '', -1);
VALUES ('Cubesat', 0, '', -1, '', -1);
(if Projekt=Cubesat, dann merke leitung[]
am ende sortiere nach leitung[] + gib datensätze richtig aus)
War das besser (weniger ist hoffetnlich mehr) ;)
Hallo Sebastian,
VALUES (projekt1, leitung1, projekt2, leitung2, projekt3, leitung3);
VALUES ('Cubesat', 0, '', -1, '', -1);
VALUES ('Cubesat', 0, '', -1, '', -1);
VALUES ('Computer & Homepage', 0, 'Cubesat', 1, '', -1);
VALUES ('Computer & Homepage', 2, 'Cubesat', 1, '', -1);
lese ich das richtig als Tabelle mit den Spalten
projekt1 leitung1 projekt2 leitung2 projekt3 leitung3
----------------------------------------------------------------------
Cubesat 0 -1 -1
Cubesat 0 -1 -1
Computer & Homepage 0 Cubesat 1 -1
Computer & Homepage 2 Cubesat 1 -1
Wenn ja, dann solltest Du dringend daran denken, diese suboptimale Tabellenstruktur zu bereinigen. Vier dieser 6 Spalten sind schlicht überflüssig, da Du dreimal das Gleiche - ja es ist das Gleiche - in unterschiedlichen Spalten speicherst. Das ist eine ganz schlechte Idee. Statt Zeichenketten mit der Projektbezeichnung solltest Du lieber eine ID einer weiteren Tabelle speichern.
Desweiteren solltest Du Dich über NULL-Werte informieren. Sowohl Deine künstlichen -1 als auch Deine Leerstrings sehen ganz danach aus, als sollte dort entsprechend ein NULL-Wert stehen.
Du solltest Dir den Artikel Einführung Joins durchlesen, da steht vieles Wissenswerte drin.
Ich möchte jetzt, dass die Datensätze in Abhängigkeit von Leitung bezogen Cubesat sortieren, also so:
VALUES ('Computer & Homepage', 2, 'Cubesat', 1, '', -1);
VALUES ('Computer & Homepage', 0, 'Cubesat', 1, '', -1);
VALUES ('Cubesat', 0, '', -1, '', -1);
VALUES ('Cubesat', 0, '', -1, '', -1);
Nein, so etwas ist in normalem SQL nicht vorgesehen. Es ist auch nicht sinnvoll, Zeit und Arbeit in den Versuch zu stecken, mit einem wilden Konstrukt dieses Ergebnis zu erzielen. Vielmehr solltest Du Deine Tabellenstruktur bereinigen, danach sollte es möglich sein, Deine Ergebnismenge (die dann vielleicht anders aussieht) zu selektieren.
Freundliche Grüße
Vinzenz
yo,
Wenn ja, dann solltest Du dringend daran denken, diese suboptimale Tabellenstruktur zu bereinigen. Vier dieser 6 Spalten sind schlicht überflüssig, da Du dreimal das Gleiche - ja es ist das Gleiche - in unterschiedlichen Spalten speicherst. Das ist eine ganz schlechte Idee.
nicht so schnell schießen John Wayne. denormalisierung ist nicht grundsätzlich eine schlechte idee. solange die anzahl der spalten genau bestimmbar ist, solange ist es eine mögliche option.
Nein, so etwas ist in normalem SQL nicht vorgesehen.
wenn ich ihn richtig verstanden habe, dann ist das schon mit IF möglich. ob es sinnvoll ist, darüber läßt sich streiten.
Ilja