Heiko Seifert: kleine Sporttabelle

Ich würde gerne eine kleine Tabelle erstellen, die folgende Inhalte enthält

Vereinsplatz  Name       Lizenz Nr.  NVV-Platz  Punkte
1             Kai        456         25         201
2             Sören      474         45         158
3             Henning B. 1303        57         139
4             Oliver     1293        74          92
5             Witali     1294        74          92

Sortierungsfunktion soll die Anzahl der Punkte sein. Der Vereinsplatz soll sich daraus ergeben.

Am liebsten würde ich die Daten Platz und Punkte einmal wöchentlich eingeben und automatisch wird diese Tabelle erstellt.

leider gestehe ich bisher wenig Ahnung von PHP und Mysql zu haben, aber vielleicht kann mir ja jemand bei der Erstellung einer solchen vermutlich simplen Tabelle helfen oder mir ein Script nennen, dass diese Funktionen bereits beherrscht.

Denn bisher erstelle ich diese Tabellen (sie sind ein wenig größer als dieser Ausschnitt) per hand und die Arbeit ist ziemlich groß jede woche.

schönen Gruß
Heiko

  1. Hallo Heiko!
    Das mit dem Sortieren ist gar nicht einfach in PHP, sondern ziemlich komplex. Aber diese Aufgabe hat meine Spieltrieb geweckt.
    Am besten du legst am Anfang der Datei ein verschachteltes Array an, das die Daten zu allen Personen enthält. Die Personen sind alphabetisch sortiert. Der Platz wird durch die folgenden Scripts automatisch ermittelt. Die letzte Ziffer pro Person ist immer der aktuelle Punktestand.

    <?PHP
    /* ARRAY MIT DEN DATEN ZU DEN PERSONEN */
    $leute = array(
      array("Henning B.","1303","57","139"),
      array("Henning Z.","1304","58","139"),
      array("Kai","456","25","201"),
      array("Sören","474","45","158"),
    );
    ?>

    Die Daten in diesem Array sind am Ende das Einzig, was du noch zu ändern brauchst, wenn sich die Punktestände verändern. Es kann beliebig viele Personen enthalten, ist also auch jederzeit erweiterbar.
    Jetzt kommt der Teil für Fortgeschrittene. Das Script funktioniert so, wie es da steht 100%ig. Ich habe das getestet. Wenn du nicht weißt, was du tust, dann ändere nichts.

    <?PHP
    /* PERSONEN NACH PLATZ SORTIEREN */
    $leute_anzahl = count($leute);
    for($i=1;$i<=$leute_anzahl;$i+=1) {
      $platz_tmp = $leute_anzahl;
      for($j=1;$j<=$leute_anzahl;$j+=1) {
        if($i!=$j) {
          if($leute[$i-1][3]>$leute[$j-1][3]) {
            $platz_tmp-=1;
          }
          elseif($leute[$i-1][3]==$leute[$j-1][3]) {
            if($i<$j) {
              $platz_tmp-=1;
            }
          }
        }
      }
      $leute_tmp = 'leute_'.$platz_tmp;
      $$leute_tmp = $i-1;
    }
    ?>

    Wie du vielleicht siehst, haben diejenigen, die weiter oben im Alphabet stehen, einen Vorteil. Bei Punktegleichstand rücken sie nämlich automatisch einen Platz hoch, weil das Script so keine Doppelbelegung verträgt. Das kann man auch ändern. Habe aber keine Lust mir darüber Gedanken zu machen, denn dann wird es nur noch komplizierter.
    Jetzt müssen die Ergebnisse ausgedruckt werden:

    <?PHP
    /* ERGEBNISSE SORTIERT AUSDRUCKEN */
    print '<table cellpadding="2" cellspacing="4" border="2"><tr><th>Vereinsplatz</th>';
    print '<th>Name</th>';
    print '<th>Lizenz-Nr.</th>';
    print '<th>NVV-Platz</th>';
    print '<th>Punkt</th></tr>'."\r\n";
    for($i=1;$i<=$leute_anzahl;$i+=1) {
      $leute_tmp = 'leute_'.$i;
      print '<tr><td>'.$i.'</td>';
      print '<td>'.$leute[$$leute_tmp][0].'</td>';
      print '<td>'.$leute[$$leute_tmp][1].'</td>';
      print '<td>'.$leute[$$leute_tmp][2].'</td>';
      print '<td>'.$leute[$$leute_tmp][3].'</td></tr>';
    }
    print '</table>'."\r\n";
    ?>

    Das Ganze ist nur zum Test so eine hässliche Tabelle. Wenn du es noch schick mit CSS formatierst, könnte es was her machen.
    Viel Spaß!

    Der gute Gott aus Braunschweig

    n i c o

    1. Hallo Nico,

      das klappt ganz ausgezeichnet.
      Vielen Dank!

  2. yo,

    Sortierungsfunktion soll die Anzahl der Punkte sein. Der Vereinsplatz soll sich daraus ergeben.

    SELECT Name, Lizenz_Nr, NVV-Platz, Punkte
    FROM tabellen_name
    ORDER BY Punkte DESC

    bei der ausgabe der einzelnen Datensätze musst du noch darauf achten, einen zähler von 1 für die platzierung hochlaufen zu lassen, wobei auf punktegleichheit geprüft wird. einfach eine variable zur speicherung der jeweils letzten punktzahl nehmen.

    leider gestehe ich bisher wenig Ahnung von PHP und Mysql zu haben, aber vielleicht kann mir ja jemand bei der Erstellung einer solchen vermutlich simplen Tabelle helfen oder mir ein Script nennen, dass diese Funktionen bereits beherrscht.

    such mal nach phpmyadmin im netz (www.google.de). damit kannst du leicht tabellen erstellen und auch Daten eingeben.

    Ilja