Nach Datum sortieren über mehrere Spalten hinweg
bubu_s
- datenbank
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.....
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
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?
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=DESCDie 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-00Das 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-09gewü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-07ne 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
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
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;}