Bademeister: SQL-Abfrage oder -Skript für Ermittlung längste Siegesserie

Beitrag lesen

Hi.

Ich denke für eine einzige SQL-Abfrage ist es zu komplex, da ich ja im Endeffekt pro Boxer ermitteln muss, wie viele Kämpfe IN FOLGE ohne Unterbrechnung durch Niederlagen gewonnen wurden, und das Ganze muss ich dann sobald ich das für jeden Boxer einzeln ermittelt habe noch absteigend sortieren um die Top 10 der längsten Siegesserien zu erhalten.

Ich bin jetzt nicht gerade der Guru, was die Aggregatfunktionen in verschiedenen DBMS (welches benutzt Du?) angeht, aber ich habe auch die starke Vermutung, dass Du das mit einer Abfrage nicht ganz hinbekommen wirst.

Natürlich könnte ich ein PHP-Skript schreiben, welches mir die Infos ermittelt

Das wiederum dürfte kein allzu großes Problem sein. Du speicherst für jeden Kämpfer die Längen der aktuellen und längsten Siegesserie (anfangs alles 0), iterierst einmal über alle Kämpfe. Bei jedem Kampf setzt Du

  • beim Sieger die aktuelle Serie 1 hoch
  • beim Verlierer ggf. die längste Serie gleich der aktuellen, und die aktuelle auf 0.

Das geht also in linearer Zeit (ohne die Sortierung der Kämpfe vom DBMS, die vorher natürlich stattfinden muss), und das Sortieren der Boxer danach in logarithmischer (in der Anzahl der Boxer). Sieht also nicht sehr problematisch aus.

Deshalb wollte ich mal fragen, ob hier jemand eine elegantere und intelligentere Idee hat wie man das ggf. auch datenbankseitig lösen könnte.

Was sich evtl. auch anbieten würde, wäre, die längste Serie jedes Boxers in der Datenbank zu führen und beim Eintragen von Kampf-Ergebnissen per Trigger zu aktualisieren. Das wäre praktisch überhaupt kein Aufwand. Redundanzen in Datenbanken sind oft schlecht, aber nicht immer.

Viele Grüße,
der Bademeister