Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Rangliste erstellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Rangliste erstellen

    Hallo zusammen
    Folgendes Problem:
    Ich möchte die Datensätze nach einer Spalte sortieren und dann nummerieren und Rangliste erstellen. Das funktioniert:
    PHP-Code:
     $count=1;
    echo 
    '<table>';
     foreach (
    $rows as $key) {
    $rang$count++; }

    echo 
    "<tr><td>".rang."</td><td>.key[4]."</td></tr
    Ich kann nun $rang in der Ausgabe einsetzen (es wurde nach Spalte $key[4] sortiert)
    Nun möchte ich aber ExAequo-Klassierungen ermöglichen: Wenn $key[4] gleichgross ist wie $key[4] im vorherigen Datensatz, dann ist es derselbe Rang (oder leer lassen). In der nächsten Zeile sollte aber wieder der richtige Rang (also einer übersprungen) angezeigt werden.
    Sieht da jemand eine Lösung?
    Vielen Dank für eure Hilfe!


  • #2
    Zitat von winter Beitrag anzeigen
    Sieht da jemand eine Lösung?
    Ja. Laß das gleich in der DB machen, rank() und dense_rank() existieren genau dafür.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Ich habe aber keine Datenbank, die Daten kommen aus einem csv-File.

      Kommentar


      • #4
        dann lies dein csv komplett in ein array, sortiere es und gib es dann aus

        http://www.w3schools.com/php/func_array_arsort.asp
        :cookie: ?

        Kommentar


        • #5
          Ja danke, das mache ich eigentlich schon, die Sortierung ist nicht das Problem.
          PHP-Code:
          <?php
          function compare$a$b )
          {
              return 
          $a[5] - $b[5];
          }

          if ((
          $handle fopen("daten.csv""r")) !== FALSE) {
              while ((
          $data fgetcsv($handle1000",")) !== FALSE
                    {
                  
          $rows[] = $data;
              }
                          
          fclose($handle);

          usort$rows"compare" );
          aber das Problem ist nun, dass ich mit dieser Zeilenabfolge eine Reihenfolge machen möchte.
          PHP-Code:
           $count=1
          echo 
          '<table>'
           foreach (
          $rows as $key) { 
          $rang$count++; } 

          echo 
          "<tr><td>".rang."</td><td>.key[4]."</td></tr>";
          echo '</table>'; 
          Aber eben: Wenn die Sortierung infolge eines gleichen Resultates ExAequo-Ränge hervorbringt, möchte ich das in der Tabelle anzeigen.
          Habt ihr einen weiteren Tipp?

          Kommentar


          • #6
            PHP-Code:
             $count=1
            echo 
            '<table>'
             foreach (
            $rows as $key) { 
            $rang$count++; } 

            echo 
            "<tr><td>".rang."</td><td>.key[4]."</td></tr>";
            echo '</table>'; 
            Allein am Syntaxhighlighting sollte dir was auffallen... Stringverkettung und wie sieht eine PHP-Variable aus....
            Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

            Kommentar


            • #7
              Einerseits hast du count und andererseits halt dann noch eine Variable, den Rang, den du nur erhöhst wenn der Wert key[4] sich verändert hat. Überlegen musst du noch ob es nach gleichen Werten/Punkten "normal" weitergeht oder eben die Plätzen entsprechend erhöht werden und dadurch Lücken entstehen, was du halt haben willst.

              Also:
              Code:
              Rang | Punkte
              1    | 15
              2    | 12
              2    | 12
              3    | 10
              4    | 8
              oder:
              Code:
              Rang | Punkte
              1    | 15
              2    | 12
              2    | 12  (statt Rang 3)
              4    | 10
              5    | 8
              LG
              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Ja ich brauche die zweite Variante.
                Aber wie kann ich schauen, ob $key[4] gleich ist wie das vorherige $key[4]?
                Und wie überspringe ich dann den Counter?
                Vielen Dank

                Kommentar


                • #9
                  Ich würde erstmal meinen Code so schreiben, dass er funktionsfähig ist, dann kannst du dir Gedanken machen, wie man sowas löst. Tipp: Dazu gibt es if.
                  Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

                  Kommentar


                  • #10
                    ... und den "alten" Wert in einer Var abstellen ("buffern") und nur bei Veränderung updaten.
                    Schau mal da, da sieht man es schön: http://stackoverflow.com/a/16727743

                    LG
                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      genau, diesen Buffer habe ich gesucht, so funktioniert es!
                      Besten Dank für eure Hilfe!

                      Kommentar

                      Lädt...
                      X