Daniel: Nach mehreren Kriterien sortieren

Hallo!

Ich hab mal wieder ein _kleines_ Datenbankproblem: Ich möchte gerne einen ausgelesenen Datensatz(Mysql) nach mehreren Kriterien sortieren. Laut Mysql Handbuch geht das so:

SELECT ordersatz,artikelnr_intern,ueberschrift,anzahl_lagernd FROM artikel ORDER BY ordersatz,artikelnr_intern,anzahl_lagernd ASC

...nun wird zwar nach "anzahl_lagernd" Aufsteigend sortiert, nach den anderen beiden jedoch standardmässig Absteigend sortiert, da sich das ASC ja nur auf das unmittelbar davorstehende Feld bezieht

Folgender Versuch geht auch nicht so wie ich es will:

SELECT ordersatz,artikelnr_intern,ueberschrift,anzahl_lagernd FROM artikel ORDER BY ordersatz ASC,artikelnr_intern ASC,anzahl_lagernd ASC

bewirkt genau das gleiche wie die 1. Abfrage

Weiss jemand vielleicht wie man das dann richtig schreiben muss damit alle Aufsteigend (ASC) sortiert werden?

Danke,
Daniel

  1. Hallo!

    SELECT ordersatz,artikelnr_intern,ueberschrift,anzahl_lagernd FROM artikel ORDER BY ordersatz,artikelnr_intern,anzahl_lagernd ASC

    ...nun wird zwar nach "anzahl_lagernd" Aufsteigend sortiert, nach den anderen beiden jedoch standardmässig Absteigend sortiert, da sich das ASC ja nur auf das unmittelbar davorstehende Feld bezieht

    Nein, standardmäßig wird aufsteigend sortiert.

    Folgender Versuch geht auch nicht so wie ich es will:

    SELECT ordersatz,artikelnr_intern,ueberschrift,anzahl_lagernd FROM artikel ORDER BY ordersatz ASC,artikelnr_intern ASC,anzahl_lagernd ASC

    bewirkt genau das gleiche wie die 1. Abfrage

    Ja, klar, weil ASC eben Standard ist ;-))

    Aufsteigend heißt vom Kleinsten zum Größten also:
    1
    2
    3
    4

    bzw:
    a
    b
    c
    d

    Andersrum wäre absteigend, also DESC.

    Du weißt aber schon, dass die Datensätze durch die Sortierung nicht "auseinandergerissen" werden? Dein Statement sortiert die _Datensätze_ hauptsächlich nach ordersatz (aufsteigend, also vom Kleinsten zum Größten). Bei identischen Werten im Feld ordersatz, werden _diese_ Datensätze nach artikelnr_intern sortiert und _nur_ für Datensätze, die identische Werte in den Feldern ordersatz _und_ artikelnr_intern haben, greift die Sortierung nach anzahl_lagernd.

    viele Grüße

    Axel

    1. SELECT ordersatz,artikelnr_intern,ueberschrift,anzahl_lagernd FROM artikel ORDER BY ordersatz,artikelnr_intern,anzahl_lagernd ASC

      ...nun wird zwar nach "anzahl_lagernd" Aufsteigend sortiert, nach den anderen beiden jedoch standardmässig Absteigend sortiert, da sich das ASC ja nur auf das unmittelbar davorstehende Feld bezieht
      Nein, standardmäßig wird aufsteigend sortiert.

      Ja genau. sorry habe mich vertan :)

      Folgender Versuch geht auch nicht so wie ich es will:

      SELECT ordersatz,artikelnr_intern,ueberschrift,anzahl_lagernd FROM artikel ORDER BY ordersatz ASC,artikelnr_intern ASC,anzahl_lagernd ASC

      bewirkt genau das gleiche wie die 1. Abfrage
      Ja, klar, weil ASC eben Standard ist ;-))

      Du weißt aber schon, dass die Datensätze durch die Sortierung nicht "auseinandergerissen" werden? Dein Statement sortiert die _Datensätze_ hauptsächlich nach ordersatz (aufsteigend, also vom Kleinsten zum Größten). Bei identischen Werten im Feld ordersatz, werden _diese_ Datensätze nach artikelnr_intern sortiert und _nur_ für Datensätze, die identische Werte in den Feldern ordersatz _und_ artikelnr_intern haben, greift die Sortierung nach anzahl_lagernd.

      Also ich habe da nocheinmal getestet, eigentlich sortiert Mysql überhaupt nur die 1. Spalte :

      Pos     a-nr    o-satz  name            lagernd
      1   0   0   testartikel     0
      2  0  1967  testartikel  8
      3  10000  1967  testartikel  8
      4  10000  1967  testartikel  8
      5  10000  1967  testartikel  8
      6  10000  1967  testartikel  8
      7  10000  1967  testartikel  8
      8  10000  1967  testartikel  8
      9  10008  1967  testartikel  8
      10  10010  1967  testartikel  8
      11  10011  1967  sdad          15
      12  10012  1967  sdad          4
      13  10013  1967  sdad          4
      14  10014  1967  sdad          4
      15  10015  1967  sdad          4
      16  10016  1057  21          1
      17  10017  1967  1          11111111
      18  10018  1967  1          11111111
      19  10019  1967  1          11111111
      20  10020  1967  1          11111111
      21  10021  1967  1          11111111
      22  10022  1967  1          11111111
      23  10023  1967  1          11111111
      24  10024  1967  1          11111111
      25  10025  1057  efd          256
      26  10026  1057  efd          256
      27  10027  1057  Vanady-200stk.  8

      Verstehe ich nicht wieso

      mfg,
      Daniel

      1. hi,

        Also ich habe da nocheinmal getestet, eigentlich sortiert Mysql überhaupt nur die 1. Spalte : [...]

        sag mal, bist du _sicher_, dass du die sortierkriterien jetzt in der "richtigen" reihenfolge angegeben hast?

        das ergebnis, das du gepostet hast, sieht danach aus, als ob artikelnr_intern (a-nr in der ausgabe) das erste sortierkriterium waere, und nicht ordersatz, wie du sagtest ...

        gruss,
        wahsaga

        1. hi wahsaga

          sag mal, bist du _sicher_, dass du die sortierkriterien jetzt in der "richtigen" reihenfolge angegeben hast?

          das ergebnis, das du gepostet hast, sieht danach aus, als ob artikelnr_intern (a-nr in der ausgabe) das erste sortierkriterium waere, und nicht ordersatz, wie du sagtest ...

          Ja die Sortierabfrage war etwas anders, aber das Grundprinzip bleibt ja im Endeffekt dasselbe, nämlich, dass die Sekundär und Tertiär-Suchreihenfolge nicht so ist wie ich es gerne haben will :(

          Gruss,
          Daniel