MYSQL: Sortierung mit Priorisierung
Michael H.
- datenbank
0 Frank (no reg)0 Michael H.0 dedlfix0 Michael H.
Hi Leute,
Eine Frage, die ich bisher durch Google oder das Mysql-Handbuch nicht klären konnte:
Ich würde gerne eine Tabelle sortiert ausgeben, allerdings würde ich dabei gerne einen spezifischen Eintrag explizit an den Anfang bzw ans Ende setzen wollen.
Wisst ihr vielleicht, ob das geht und wenn ja: wie?
Merci,
Michael
... indem du diesem speziellen Eintrag einfach einen entsprechenden Sortierwert zuweist, der bei einer Sortierung (wow, welch Logik) dann eben ganz vorn oder hinten steht?
Ciao, Frank
... indem du diesem speziellen Eintrag einfach einen entsprechenden Sortierwert zuweist, der bei einer Sortierung (wow, welch Logik) dann eben ganz vorn oder hinten steht?
Ciao, Frank
Schlaue Idee Frank, aber: ich will die Liste ja prinzipiell alphabetisch soritieren (nicht nach Nummern). Die List soll zudem einfach erweiterbar sein, so dass ich nicht bei jeder Änderung neu durchnummerieren muss.
Zusätzlich sind die Werte schon seit 2 Jahren in der DB und hundertfach benutzt und jetzt will mein Auftraggeber auf einmal einen bestimmten Wert priorisiert haben und einen anderen Wert immer am Ende der Liste sehen haben.
Zurück ans Reissbrett
Hi!
ich will die Liste ja prinzipiell alphabetisch soritieren (nicht nach Nummern).
Dann ist das das zweite Sortierkriterium
Die List soll zudem einfach erweiterbar sein, so dass ich nicht bei jeder Änderung neu durchnummerieren muss.
Kein Problem.
Zusätzlich sind die Werte schon seit 2 Jahren in der DB und hundertfach benutzt und jetzt will mein Auftraggeber auf einmal einen bestimmten Wert priorisiert haben und einen anderen Wert immer am Ende der Liste sehen haben.
Wie werden diese Priorisierungen ermittelt? Da gibt es doch sicher einen Ausdruck (oder mehrere), die ein boolesches Ergebnis liefern. MySQL kennt Control Flow Functions, mit denen Werte in Abhängigkeit zurückgegeben werden können. Nimm eine oder mehrere von den Funktionen zur Berechnung eines Wertes 0 (vorn), 1 (irgendwo), 2 (hinten) und den als erstes Sortierkriterium.
Lo!
Ich mach euch mal ein Beispiel:
ID | Text
1 abc
2 def
3 ghi
4 jkl
5 mno
Die Liste existiert schon und die IDs sind als Foreign Keys überall verteilt. Wenn nun die gesamte Liste ausgegeben wird soll ich nun sicherstellen, dass "jkl" als erster Eintrag und "def" als Letzter erscheint.
Natürlich könnte ich jetzt eine zusätzliche Spalte einfügen ("sortorder" oder so) und zuerst danach und dann alphabetisch sortieren. Das dieses Problem aber nicht nur eine sondern Dutzende Tabellen betrifft die gleichartig aufgebaut sind hätte ich einen großen Anpassungsaufwand vor mir, nicht nur auf der DB sondern auch in allen Queries die damit arbeiten.
Deshalb hatte ich gehofft, einem von euch fällt da was ganz tolles ein (eine mir bislang unbekannte ORDER BY Option vielleicht). Aber offenbar gibts es hier keine Zauberstab-Lösung...
:(
Hi!
Ich mach euch mal ein Beispiel:
Danke, nicht notwendig. Es ist mir, und Frank vermutlich auch, schon seit dem ersten Posting klar, was du willst.
Die Liste existiert schon und die IDs sind als Foreign Keys überall verteilt. Wenn nun die gesamte Liste ausgegeben wird soll ich nun sicherstellen, dass "jkl" als erster Eintrag und "def" als Letzter erscheint.
Schon klar, dann muss eben das erste Suchkriterium bei "jkl" eine 0 liefern und bei "def" eine 2, ansonsten eine 1.
Natürlich könnte ich jetzt eine zusätzliche Spalte einfügen ("sortorder" oder so) und zuerst danach und dann alphabetisch sortieren.
Wäre eine Lösung, ist aber nicht erforderlich. Man kann auch Ausdrücke als Suchkriterium verwenden.
Deshalb hatte ich gehofft, einem von euch fällt da was ganz tolles ein (eine mir bislang unbekannte ORDER BY Option vielleicht). Aber offenbar gibts es hier keine Zauberstab-Lösung...
Doch, aber wie, außer ganz und gar nicht SELF-like die Lösung auf dem Silbertablett zu liefern, sollen wir sie noch beschreiben, damit du sie dir erarbeiten kannst? Die notwendige Funktionskategorie, um dir den entsprechenden Ausdruck zusammenzustellen habe ich genannt. Und nun bist du dran, die Hinweise zu verstehen oder konkret zu sagen, was du nicht verstehst.
Lo!
ja, is klar wie Kloßbrühe ...
um mal ein kleines Stichwort zu geben ... CASE WHEN feld = 'jkl' THEN 0 ELSE 1 END
Wie würdest du es denn machen, wenn du keine Datenbank und kein SQL hättest, sondern z.b. eine Excel Tabelle?
Gruss, Frank
Hi!
um mal ein kleines Stichwort zu geben ... CASE WHEN feld = 'jkl' THEN 0 ELSE 1 END
Oder 2 geschachtelte IF().
Wie würdest du es denn machen, wenn du keine Datenbank und kein SQL hättest, sondern z.b. eine Excel Tabelle?
Es kommt immer auf die Möglichkeiten des Systems an. Beim Beispiel Excel wüsste ich nicht, dass es etwas anderes als real existierende Spalten sortieren kann. Da würde ich eine Spalte mit Formel einfügen.
Lo!
Lo!
Es kommt immer auf die Möglichkeiten des Systems an. Beim Beispiel Excel wüsste ich nicht, dass es etwas anderes als real existierende Spalten sortieren kann. Da würde ich eine Spalte mit Formel einfügen.
Genau, du würdest einen entsprechenden sortierbaren Wert berechnen, der deine Anforderungen erfüllt und dann darauf die Sortierfunktion des Systems anwenden.
Anyway.
Schönes Wochenende.
Fränk
Hallo Michael,
Die Liste existiert schon und die IDs sind als Foreign Keys überall verteilt. Wenn nun die gesamte Liste ausgegeben wird soll ich nun sicherstellen, dass "jkl" als erster Eintrag und "def" als Letzter erscheint.
Vielleicht hilft http://aktuell.de.selfhtml.org/artikel/datenbanken/sqlsort/?
Gruß,
Tobias