bubu_s: Nach Datum sortieren über mehrere Spalten hinweg

Hallo,
brauche mal Eure Hilfe, da das Brett vor meinem Kopf einfach nicht fallen will :-)
Also ich habe eine Tabelle, die u.a. mehrere Spalten (1.Dan, 2.Dan, 3.Dan, 4.Dan, 5.Dan) enthält welche jeweils ein Datum (JJJJ-MM-TT) enthalten. Einige davon können auch 0000-00-00 sein.

Diese nun als Tabelle auszugeben, bei der über die Spalten hinweg danach sortiert wird, ob ein Datum vorhanden ist, ist kein Problem:
(angezeigt in 1 Spalte, nicht 5 Spalten)

"select * from pruefung ORDER BY 5.Dan,4.Dan,3.Dan,2.Dan,1.Dan".

Als Ergebnis werden nun zuerst die angezeigt, die ein echtes Datum (nicht 0000-00-00) beim 5.Dan haben, dann die bei 4.Dan usw. Und zwar immer die mit dem ältesten Datum innerhalb eines Dans zuerst.

kann man hier schauen:

http://www.jcwk.de/jcextras/demo2/pruefung/index.php?go=anfang&loginname=&rechte=2&woher=pruefung&sort=7&sortorder=DESC

Doch wie kann ich stattdessen nun nach Datum (über die Spalten hinweg) sortieren, egal welcher Dan gemacht wurde?

Hoffe auf Hilfe.....

  1. Hello,

    kann man hier schauen:

    http://www.jcwk.de/jcextras/demo2/pruefung/index.php?go=anfang&loginname=&rechte=2&woher=pruefung&sort=7&sortorder=DESC

    Leider nicht

    Doch wie kann ich stattdessen nun nach Datum (über die Spalten hinweg) sortieren, egal welcher Dan gemacht wurde?

    Ich vermute, es wäre besser, Du würdest normalisieren.

    Tabelle sportler         Tabelle dans
      1  Fritz                   1   1   1   2005-01-02
      2  Burgis                  2   1   2   2005-05-07
      3  Paul                    3   2   1   2000-07-05

    id_sportler                id_dans
      name                       id_sportler
                                 dan
                                 dan_datum

    Dann kannst Du gruppieren und sortieren was das Zeug hält

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Danke für die schnelle Antwort, leider hilft mir das noch nicht.
      Der Link sollte jetzt gehen:
      http://www.bubu.xipx.de/jcextras/demo2/pruefung/index.php?go=anfang&loginname=&rechte=2&woher=pruefung&sort=7&sortorder=DESC

      Die Tabelle sieht so aus(Auszug):

      Tabelle sportler
         ID Name       Dan1         Dan2         Dan3
         1  Sara       1985-11-23   1988-11-26   2007-02-18
         2  Alisha     2005-07-09   0000-00-00   0000-00-00
         3  Lutz       1975-11-30   1979-11-25   1982-11-07
         4  Burgis     2000-12-27   2005-07-09   0000-00-00

      Das Ergebnis (unformatiert): Nur der höchste Dan und dessen Datum, sortiert zuerst nach Dan, dann nach Datum, klappt:

      Name      Dan
      Lutz      Dan3/1982-11-07
      Sara      Dan3/2007-02-18
      Burgis    Dan2/2005-07-09
      Alisha    Dan1/2005-07-09

      gewünsch wird aber nach Datum des höchsten Dan sortiert, dann nach Name:

      Name      Dan
      Sara      Dan3/2007-02-18
      Alisha    Dan1/2005-07-09
      Burgis    Dan2/2005-07-09
      Lutz      Dan3/1982-11-07

      ne idee?

      1. Hello,

        Danke für die schnelle Antwort, leider hilft mir das noch nicht.
        Der Link sollte jetzt gehen:
        http://www.bubu.xipx.de/jcextras/demo2/pruefung/index.php?go=anfang&loginname=&rechte=2&woher=pruefung&sort=7&sortorder=DESC

        Die Tabelle sieht so aus(Auszug):

        Tabelle sportler
           ID Name       Dan1         Dan2         Dan3
           1  Sara       1985-11-23   1988-11-26   2007-02-18
           2  Alisha     2005-07-09   0000-00-00   0000-00-00
           3  Lutz       1975-11-30   1979-11-25   1982-11-07
           4  Burgis     2000-12-27   2005-07-09   0000-00-00

        Das Ergebnis (unformatiert): Nur der höchste Dan und dessen Datum, sortiert zuerst nach Dan, dann nach Datum, klappt:

        Name      Dan
        Lutz      Dan3/1982-11-07
        Sara      Dan3/2007-02-18
        Burgis    Dan2/2005-07-09
        Alisha    Dan1/2005-07-09

        gewünsch wird aber nach Datum des höchsten Dan sortiert, dann nach Name:

        Name      Dan
        Sara      Dan3/2007-02-18
        Alisha    Dan1/2005-07-09
        Burgis    Dan2/2005-07-09
        Lutz      Dan3/1982-11-07

        ne idee?

        Ja, aber nur eine schmuddelige mit ganz vielen geschachtelten if's
        Das Datum ist ja ohnehin sortierfähig.
        Du willst aber gar nicht nur das Datum, sondern auch den Spaltennamen als Datenwert
        Und das ist eben nicht sauber aufgelöst...

        Schau Dir http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if an
        Mit http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_greatest wird es nicht klappen, da Du da nur den größten Wert, aber nicht den Namen der Spalte zurückbekommst

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

        1. Hello,

          ne idee?

          Ja, aber nur eine schmuddelige mit ganz vielen geschachtelten if's
          Das Datum ist ja ohnehin sortierfähig.
          Du willst aber gar nicht nur das Datum, sondern auch den Spaltennamen als Datenwert
          Und das ist eben nicht sauber aufgelöst...

          Schau Dir http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if an
          Mit http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_greatest wird es nicht klappen, da Du da nur den größten Wert, aber nicht den Namen der Spalte zurückbekommst

          Und noch eine Schmuddelei kommt Dir zugute:

          Man kann den zweiten Dan nicht vor dem ersten machen usw.

          Harzliche Grüße vom Berg
          http://bergpost.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

          1. Supi, vielen Dank, GREATEST klappt wunderbar. Brauchte ja nur die Sortierung, Rest klappte ja sowieso.

            Lösung:
            else if ($sort == 6){
             $sql1 = "select *,GREATEST(dan5,dan4,dan3,dan2,dan1,kyu1,kyu2,kyu3,kyu4,kyu5,kyu6,kyu7,kyu8) as datmax from

            pruefungsuebersicht LEFT JOIN mitglieder_stammdaten ON pruefungsuebersicht.mitgliedid =

            mitglieder_stammdaten.Mitgliedsnummer ORDER BY datmax ".$sortorder.";";
            $pfeil6=$pfeil;}