Tobi: mysql5 / Sortierungsfrage

Hallo,

ich würde gerne nach einer Spalte sortieren, deren Inhalt jeweils aus einem Prefix und einem Zählwert besteht.
Konkret heißt das, der Inhalt setzt sich aus 2-3 Buchstaben, einem Minuszeichen, 2 weiteren Buchstaben, wieder einem Minuszeichen, 2-3 Zeichen, wieder einem Minuszeichen und danach erst dem zur Sortierung wichtigen Zählwert zusammen.

Bsp: HH-AF3-1554

Nunn würde ich gerne so sortieren, dass nur nach der leztzten Zahl sortiert wird.

Gibt es dafür eine Abfragemöglichkeit?

Tobi

  1. Hallo,

    Bsp: HH-AF3-1554

    Nunn würde ich gerne so sortieren, dass nur nach der leztzten Zahl sortiert wird.
    Gibt es dafür eine Abfragemöglichkeit?

    ja, aber keine performante. Du suchst den Teilstring, der nach dem zweiten Bindestrich kommt und betrachtest (sortierst) diesen als Integer.

    Wenn die Bestandteile relevante Aussagekraft haben, solltest Du an eine Aufteilung denken. Kommt dies nicht in Frage, so kannst Du eine zusätzliche Spalte erstellen, die diese Zahl enthält. Pflege den Inhalt dieser Spalte per Trigger. Das ist natürlich nur notwendig, wenn Performanz ein Problem darstellt.

    Freundliche Grüße

    Vinzenz

    1. Kommt dies nicht in Frage, so kannst Du eine zusätzliche Spalte erstellen, die diese Zahl enthält. Pflege den Inhalt dieser Spalte per Trigger. Das ist natürlich nur notwendig, wenn Performanz ein Problem darstellt.

      Hi Vinzenz,

      ich bin nicht ganz kundig, wie das mit den Triggern funktioniert, aber Du hast mich auf eine Idee gebracht, denn wenn ein Trigger so funktioniert, wie ich denke, dann habe ich bereits eine Spalte, die nahezu dieselbe Sortierwertigkeit hat, wie sie die getriggerte Spalte haben würde.

      Danke an alle.

      Tobi

  2. Hallo!

    [...]
    Bsp: HH-AF3-1554

    Nunn würde ich gerne so sortieren, dass nur nach der leztzten Zahl sortiert wird.

    Gibt es dafür eine Abfragemöglichkeit?

    Ich habe jetzt keine MySQL hier, aber das sollte z.B. mit order by RIGHT(<feld>, 1) gehen.

    Schöne Grüße,

    Peter

    1. Hallo Peter,

      [...]
      Bsp: HH-AF3-1554

      Nunn würde ich gerne so sortieren, dass nur nach der leztzten Zahl sortiert wird.

      Ich habe jetzt keine MySQL hier, aber das sollte z.B. mit order by RIGHT(<feld>, 1) gehen.

      das wäre nach der letzten Ziffer. Ich gehe davon aus, dass Tobias nach der gesamten Zahl (hier 1554) sortieren möchte. Das Üble an solchen Sortierungen ist, dass MySQL 5.x dafür keinen Index verwenden kann.

      Freundliche Grüße

      Vinzenz

      1. Servus Vinzenz,

        [...]
        das wäre nach der letzten Ziffer. Ich gehe davon aus, dass Tobias nach der gesamten Zahl (hier 1554) sortieren möchte. Das Üble an solchen Sortierungen ist, dass MySQL 5.x dafür keinen Index verwenden kann.

        Du hast recht, das habe ich überlesen. Da ist die Lösung mit Substring natürlich korrekt. Die Performance ist natürlich bei einer solchen Lösung nicht der Bringer. Bei "historisch gewachsenen" DB-Schemata kommen solche Strukturen mit fehlender Normalisierung aber öfter mal vor. Deshalb hinterfrage ich das gar nicht erst. ;)

        Schöne Grüße,

        Peter

        1. Bei "historisch gewachsenen" DB-Schemata kommen solche Strukturen mit fehlender Normalisierung aber öfter mal vor. Deshalb hinterfrage ich das gar nicht erst. ;)

          Und das machst Du auch gut so ;-)

          Tobi

  3. Hallo Tobi,

    Nunn würde ich gerne so sortieren, dass nur nach der leztzten Zahl sortiert wird.
    Gibt es dafür eine Abfragemöglichkeit?

    Ich würde erst den entsprechenden Teil ausschneiden und dann danach sortieren.

    ORDER BY SUBSTRING(deineSpalte) [1]

    Vorraussetzung: Der String ist immer gleich aufgebaut und du weißt, wo die Zahlen beginnen. Wenn nicht, dann brauchst du noch Position dazu.

    ciao
    romy

    [1] genaue Syntax von Substring bitte nachschlagen, hab ich gerade nicht zur Hand.