SQL Abfrage aus Relationstabelle

Meine erste Idee wäre jetzt ein Subselect das sich um die Sortierung kümmert und dann außen rum die Aggregation.
 
@uburoi

Ich bin beruflich Programmierer und wenn mir der meiste Code, der mir da von manch anderen Kollegen begegnet, so "hemdsärmelig" wäre wie deiner, wäre ich schon froh. ;)
 
@Freezedevil: Ich habe mal verschiedene Varianten ausprobiert, bin aber noch zu keinem passenden Ergebnis gekommen. Hast du einen konkreten Ansatz, den ich weiterverfolgen könnte?

@Andarkan: Vielen Dank, aber bei mir ist gerade Stochern im Nebel. Da werden die Kollegen schon bessere Strategien fahren.

Gruß Jens
Ergänzung ()

Nachtrag: Ich habe jetzt nochmal herumgelesen, und in MySQL beispielsweise kann man innerhalb von GROUP_CONCAT sortieren; das scheint es so direkt bei SQLite aber tatsächlich nicht zu geben. Da bräuchte es wohl einen Workaround, oder ich muss doch die Sortierung und Konkatinierung nach der Abfrage im Programm vornehmen. 😕
 
Zuletzt bearbeitet:
Die Frage ist, läuft die Anwendung auf MySQL oder auf SQLite?

Ich halte mich bei Anwendungen immer an die Produktion. In Zeiten von Docker ist auch das kein Thema mehr, für die lokale Entwicklung. Wobei das bei mir eher in Richtung VM geht.

Aber ja, ein Blick in die Doku zeigt folgendes:

Übrigens, jeder fängt mal klein an 😉 Man muss sich nur zu helfen wissen.
 

Anhänge

  • 617DF990-5AFE-4402-ABAD-16F7F50E5E48.png
    617DF990-5AFE-4402-ABAD-16F7F50E5E48.png
    461 KB · Aufrufe: 185
uburoi schrieb:
@Freezedevil: Ich habe mal verschiedene Varianten ausprobiert, bin aber noch zu keinem passenden Ergebnis gekommen. Hast du einen konkreten Ansatz, den ich weiterverfolgen könnte?
http://sqlfiddle.com/#!9/c2afc1/4 So meinte ich in etwa. Das erste select ist nur zum Veranschaulichen, dass die Ergebnisse ohne Order By tatsächlich in der falschen Reihenfolge sind.

Edit: Ich sehe gerade, dass das nicht funktioniert und die Ergebnisse auch zufällig sortiert werden. Sorry.
 
Ich habe auch keine Lösung gefunden; mit SQLite scheint das tatsächlich nicht zu gehen (zumindest nicht nach meinem Kenntnisstand und mit Bordmitteln). Irgendwo hatte ich zwar gelesen, dass man sich eine entsprechende Funktionalität frickeln kann, wenn man SQLite selbst kompiliert, aber – nein Danke! 🙈

Von daher musste ich mich jetzt doch darauf verlegen, die Daten nach der vorsortierten Abfrage noch einmal im Programm für die Ausgabe aufzubereiten. Wie das in Sachen Performance auskommt, wird sich bei größerer Datenmenge noch zeigen; mit meinen paar Testdaten gibt es natürlich bisher keine Verzögerung.

Gruß Jens
 
Ich würde mir erst mal keine Gedanken um die Performance machen. Funktionalität sollte immer vor der Optimierung stehen. Wenn du dann merkst, dass es zu langsam ist, dann kannst du dir um die Optimierung Gedanken machen.

Aber zur Sortierung gibt es gute und effiziente Algorithmen, und ich bezweifle, dass du selbst einen Algorithmus entwickeln musst, denn so ein Algorithmus kann sehr abstrakt formuliert werden, ohne konkret zu wissen, was sortiert wird. Wichtig ist nur, dass es Möglich ist, zwei Elemente miteinander zu vergleichen und daraus abzuleiten, ob ein Element vor oder nach (oder gar an selber Stelle) einsortiert werden muss.

Die entsprechende Vergleichsfunktion, die nichts anderes macht als zwei Elemente zu vergleichen und dieses Ergebnis zurückzuliefern (in Form von -1, 0 und 1), wird dann der Sotierfunktion übergeben. Das sollte auch mit Objekten funktionieren und nicht nur mit den angegeben Datentypen:
https://docs.xojo.com/Sort

Heute Rechner sind schon ziemlich schnell, da fällt viel Pfusch leider schon gar nicht mehr auf.
 
Ja, eine solche Vergleichsfunktion habe ich auch implementiert. Die einzelnen Titel habe ich in einem Dictionary zwischengespeichert, und wenn es einen Koautor gibt (was ja vergleichsweise weniger häufig vorkommt), hole ich mir nochmal den String aus dem Dictionary und arbeite den zweiten Autor ein; hinterher wird das fertige String-Array dann sortiert und zurückgegeben und an die GUI weitergereicht. Das sollte sich auch bei mehreren tausend Titeln im niedrigen Millisekunden-Bereich abspielen, von daher sehe ich jetzt erstmal keinen größeren Optimierungsbedarf, sofern die Praxis später nicht noch anderes zeigt.

Gruß Jens
 
Zurück
Oben