Natürliche Sortierung für Einheiten

  • Ich fände es ganz nett, wenn die Einheiten "richtig" sortiert würden, also so, wie Mensch das gewöhnt ist. Da kommt nach 1 2 und nicht 10. ;)
    Da ich die Problematik kenne, hier eine Lösung in SQL:

    SQL
    SELECT * FROM `lh_einheiten` ORDER BY SUBSTRING_INDEX(einheit_name, '-', 1) ASC, SUBSTRING_INDEX(einheit_name, '-', -1) + 0 ASC;


    Damit wird der Name am - zerschnippelt und dann nach dem Teil vor und dem Teil nach dem - sortiert. Damit bekommt man da eine schöne Sortierung.
    Wird allerdings nicht bei Einheiten funktionieren, die schon ein - im Namen haben, fürchte ich.

  • müsste einfacher gehen, entweder haben die einen Erstellungszeitstempel oder aber einfach nach ID aufsteigend (sofern ganzzahlig), löst natürlich nicht die Sortierung in allen Fällen, ist aber wesentlich einfacher

  • Whity: wenn du nur den timestamp bzw. die id nimmst, würde es je nach deinen baufaufträgen, in deinem sortierungsvorschlag in etwa so aussehen.

    Jagdpanzer-1
    Jagdpanzer-2
    Kampfpanzer-1
    Jagdpanzer-3
    Kampfpanzer-2

    D.h. es wären nicht mehr zwangsläufig alle Truppentypen untereinander.

    Tobys Vorschlag sollte funktionieren. Allerdings muss man bedenken, dass Stringfunktionen in Queries verhältnismäßig viel Performance kosten. Das macht sich sicherlich noch nicht bei der aktuellen Userzahl bemerkbar. Aber wenn um die tausend User gleichzeitig online und aktiv sind, kann das einem DB Server ganz schön viel abverlangen und für unschöne Verzögerungen sorgen (ich spreche da aus Erfahrung :) ) Deshalb sollte man so wenig Stringfunktionen wie möglich in Abfragen verwenden (lässt sich nicht immer vermeiden, aber wenn man es beim Programmieren stets im Hinterkopf hat, kann man schon einiges an Performance rausholen).


    Deshalb würde ich hier einen Mix aus beiden Vorschlägen machen. So spart man sich immerhin eine Stringfunktion. Würde dann so aussehne

    SQL
    SELECT * FROM `lh_einheiten` ORDER BY  SUBSTRING_INDEX(einheit_name, '-', 1) ASC, EINHEITEN_ID ASC;
  • Dann wirds ja noch schräger?!
    Du meinst außerdem vermutlich eher sowas:

    ORDER BY einheit_typ ASC, einheit_id ASC

    Nur ist das dann keine alphabetische Sortierung mehr, da die Typen ja Zahlen sind und die Einheitenarten sicherlich nicht alphabetisch eingegeben wurden. ;)

    Ne, fürchte ohne ein wenig geschnippel bekommt man da keine Sortierung, die nicht sofort als Bug gemeldet wird.

    Als Alternativvorschlag könnte man sich den Einheitennamen gleich ganz sparen und nur die fortlaufende Nummer merken, der Name wird dann einfach zusammengesetzt aus der Nummer und dem Namen des Einheitentyps. Dazu müsste man dann halt noch nen Join mit aufnehmen, dürfte der Performance aber auch nicht unbedingt zuträglich sein. Obwohl, evtl. wird ja schon gejoint, kA.

  • SELECT * FROM `lh_einheiten` AS army GROUP BY 'spielername' ORDER BY army.id, army.einheiten_typ ASC

    edit: so war schon ok wenn Typdarstellung ohne Zahl

    3 Mal editiert, zuletzt von Whity (31. Mai 2010 um 16:10)

  • Ähem und das soll genau was bewirken?!
    Du weißt, was ein GROUP BY macht? Dann hast du nur noch eine Einheit pro Typ in der Liste stehen, das ist sicher nicht das, was du willst.

  • oh weia, Asche über mein Haupt! Doch kein GROUP_BY :wacko:
    nee, schon ein ORDER_BY wenn die Typen nicht durch Zahlen gespeichert sind wie du vorher schon beschrieben hast

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!