Verzwickte Highscoreliste

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

  • Verzwickte Highscoreliste

    Hallo

    Ich bin leider mit SQL und PHP nicht so fließend, wie ich mir das wünschen würde deswegen poste ich hier gerade ein akkutes Problem. Habe die ganze Nacht dran gesessen und komme nicht vorran. Es wäre großartig wenn mir da jemand einen Anstoß geben könnte.

    Ich habe ein kleines Flashgame Programmiert das natürlich eine Highscoreliste braucht. Die Ergebnisse werden per PHP vom Flash in eine MySQL Datenbank gebracht.

    Das ist soweit alles in Ordnung und fertig (!). Es geht nur um die kleinigkeit, dem Spieler beim veröffentlichen seines Scores auch mitzuteilen auf welchen Platz er nun liegt. Das ist aber gerade in DIESEM Spiel nicht einfach weil ganze 4 Werte darüber entscheiden.

    Zunächst stehen die Spieler, die meisten levels geschaft haben (Feld `level`) ganz oben. Bei gleichstand wird die Anzahl der Pickups verglichen (Feld `pickup`). Besteht immer noch gleichstand wird die Anzahl der Schläge verglichen (Feld `moves`). Das Spiel ist so ähnlich wie Golf, je weniger Schläge desto besser. Gibt es immer noch zwei Spieler auf dem gleichen Platz wird die Zeit verglichen (Feld `zeit`), hier gilt wieder weniger ist besser. Sich die Highscoreliste so zu sortieren und GANZ auszugeben war kein Thema, das mache ich einfach so:

    PHP-Code:
    $satz mysql_db_query($dbname,"SELECT * FROM $dbtab ORDER BY 
    `level` DESC, 
    `pickup` DESC, 
    `moves` ASC, 
    `zeit` ASC 

    LIMIT 
    $maxspieler OFFSET $foffset"); 
    Wie zum Geier soll ich aber herausfinden auf welchen Platz ein Spieler mit ganz bestimmten Ergebnissen gelandet ist? Das ist ganz sicher etwas total grundlegendes, was ich einfach in keinem Tutorial gesehen habe.. mir ist das ganze jetzt schon peinlich.. hilfe!
    Zuletzt geändert von Krystman; 14.09.2005, 16:11.

  • #2
    Re: Verzwickte Highscoreliste

    http://www.php-resource.de/forum/sho...threadid=47906
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Tut mir leid, die Zeile war wohl zu lang. Habe auch mittlerweile eine Lösung gefunden. War natürlich trivial, hatte wohl einfach eine denksperre:

      PHP-Code:
      $satz mysql_db_query($dbname,"SELECT * FROM $dbtab WHERE
      `level`> 
      $flevel");
      $fid mysql_num_rows($satz); 
      $ein $ein+$fid;

      $satz mysql_db_query($dbname,"SELECT * FROM $dbtab WHERE
      `level`= 
      $flevel AND 
      `pickup`> 
      $fpickup");
      $fid mysql_num_rows($satz); 
      $ein $ein+$fid;

      $satz mysql_db_query($dbname,"SELECT * FROM $dbtab WHERE
      `level`= 
      $flevel AND 
      `pickup`= 
      $fpickup AND 
      `moves`< 
      $fmoves");
      $fid mysql_num_rows($satz); 
      $ein $ein+$fid;

      $satz mysql_db_query($dbname,"SELECT * FROM $dbtab WHERE
      `level`= 
      $flevel AND 
      `pickup`= 
      $fpickup AND 
      `moves`= 
      $fmoves AND 
      `zeit`< 
      $fzeit");
      $fid mysql_num_rows($satz); 
      $ein $ein+$fid
      Ellegant ist das aber nicht, ginge sowas auch nur in einer Abfrage?

      Kommentar


      • #4
        na klar geht das auch einfacher.

        die frage nach dem level ist z.B. in allen queries gleich. Also kannst du das schonmal zusammenfassen. usw.

        Neben AND gibt es auch OR. (logisch) Das könnte dir weiter helfen.

        Außerdem macht man kein SELECT *, sondern wählt nur die spalten, die man auch wirklich haben will. willst du alle, dann schreibst du alle in die query.

        In der Query lassen sich auch schon berechnungen durchführen, die du erst nach deinem Query machst.

        Kommentar

        Lädt...
        X