Ankündigung

Einklappen
Keine Ankündigung bisher.

Mysql 'Rangliste' ermitteln...

Einklappen

Neue Werbung 2019

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

  • Mysql 'Rangliste' ermitteln...

    Hi. Ich stehe vor einem Problem.
    Undzwar muss ich in einer Tabelle die "Rangliste" vom dem aktiven User rausfinden. Die Tabelle hat u.a. folgende Werte "Points","Duration".
    Nach diesen beiden Werten muss ich die aktuelle Rangposition rauskriegen.

    Mein Statement sieht so aus.
    PHP-Code:
    "SELECT * FROM answers ORDER BY points DESC, duration ASC"
    Meine Frage:
    Kann ich die Ranglistenabfrage (Logig: Auf welcher Rowposition ist der aktuelle User) auf SQL BASIS durchführen. Oder muss ich den Weg über Arrays gehen, und in diesem prüfen, an welcher Stelle der User ist?

  • #2
    Ja, da hatten wir neulich erst einen Thread zu...

    http://www.php.de/datenbanken/66664-...ngabfrage.html
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Danke für den Link. Habs aber nun so gelöst. Für mich ist dieser Weg schon etwas fragwürdig, weil bei grösseren Tabellen, die Berechnung lange dauern würde.

      PHP-Code:
      $i    =    1;
      while( 
      $row mysql_fetch_row$query ) ) 
          {
          if( 
      $_SESSION['activeUser'] == $row[1]){
              
      $rank    =    $i;
              break;
              }
          
      $i++;
          } 

      echo 
      $rank
      Für bessere Lösungswege bin ich dankbar.

      Kommentar


      • #4
        Zitat von halskrause Beitrag anzeigen
        Danke für den Link. Habs aber nun so gelöst. Für mich ist dieser Weg schon etwas fragwürdig, weil bei grösseren Tabellen, die Berechnung lange dauern würde.
        Für mich ist dieser Weg auch fragwürdig. Vielleicht solltest du auch auf den Link klicken und viel wichtiger - lesen was dort steht...
        Je grösser der Dachschaden, desto schöner der Ausblick zum Himmel. - [WIKI]Karlheinz Deschner[/WIKI]

        Kommentar


        • #5
          Zitat von halskrause Beitrag anzeigen
          Für bessere Lösungswege bin ich dankbar.
          Der gezeigte Link war schon die Lösung. aber der Thread war etwas lang.
          Dehalb hier mal eine Zusammenfassung:

          Code:
          CREATE TABLE answers (
           user_id INT NOT NULL,
           points INT NOT NULL,
           duration INT NOT NULL,
           
           PRIMARY KEY (user_id)
          );
          
          INSERT INTO answers VALUES
          ( 1, 10, 20),
          ( 2, 20, 10),
          ( 3, 30, 10);
          
          
          SELECT ranking.rank
            FROM (
                  SELECT user_id, points, duration, @rank := @rank +1 AS rank
                    FROM answers,
                    (SELECT @rank := 0 AS rank) AS init
                   ORDER BY points DESC, duration ASC
                 ) AS ranking
           WHERE ranking.user_id = 1;
           
          +------+
          | rank |
          +------+
          |    3 |
          +------+
          1 row in set (0.02 sec)
          
          mysql>
          Sollte klappen, sofern es pro user_id nur einen Datensatz in der Tabelle answers gibt.

          Grüße
          Thomas

          Kommentar

          Lädt...
          X