Ankündigung

Einklappen
Keine Ankündigung bisher.

[gelöst] Position des Datensatzes

Einklappen

Neue Werbung 2019

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

  • [gelöst] Position des Datensatzes

    Hallo,

    ich habe eine kleine Hiscore-Liste bei einem Spiel.
    Jetzt wird z.B. ein Spieler eingetragen mit 1543 Punkten.

    Wenn ich mir die Liste ansehe (über SELECT name,punkte FROM hiscore ORDER BY punkte DESC), dann sehe ich das die Person auf Platz 24 steht.

    Aber gleichzeitig würde ich gerne eine Meldung ausgeben die dem Spieler sagt, "Sie haben Platz 24 erreicht". Und das sollte schon dastehen BEVOR er in die Liste eingetragen wurde.

    Und dort beginnt mein Problem. Die einzige Möglichkeit die ich finde ich, die Liste über den oben geschriebenen Befehl durchzugehen und nebenbei einen Counter durchlaufen zu lassen. Und wenn der Datensatz gefunden wurde, dann habe ich den Platz.

    Da diese Hiscore aber die Besten 10.000 speichern soll finde ich diese Möglichkeit nicht gerade Geschwindigkeitsfreundlich.

    Wie könnte mein Weg aussehen um die Position des Spielers abzufragen. Ich habe schon einen JOIN LEFT versucht, allerdings komtm da nichts sinnvolles bei raus, weil ich wieder die ganze Liste durchgehen müsste.

    Brauche Hilfe.

    Der Aufbau der Tabelle ist ganz schlicht gehalten:
    ident | name | punkte

    und als Variablen in meinem Script habe ich
    $_POST["name"] und $_POST["punkte"].
    Die Felder kommen über Flash rein und werden natürlich auf gültigkeit und versuchter Manipulation geprüft

    Ich suche wie immer keine Komplettlösung, bei mir zählt immer der Weg ist das Ziel, aber leider stehe ich vor einem Schilderwald und finde nicht mal einen Trampelpfad!

    Danke,
    Stefan

  • #2
    so?
    Code:
    select  count(*) from hiscore where punkte > 123
    wobei 123 durch die aktuelle Punktezahl ersetzt werden muss;

    Kommentar


    • #3
      Super, geht!
      Code:
      SELECT COUNT(*) FROM hiscore WHERE punkte>'$_POST[punkte]' ORDER BY punkte DESC LIMIT 1;
      Danke schön!
      Stefan

      Kommentar


      • #4
        Ergänzung:
        Wenn der Platz vor dem Eintragen errechnet wird muß man noch +1 machen.

        Sobald Eingetragen wurde und man den Platz finden möchte muß die WHERE-Clause in punkte>='$_POST[punkte]' geändert werden.

        Gruß,
        Stefan

        Kommentar


        • #5
          ich schätz mal das ORDER BY punkte DESC LIMIT 1 kannst du weglassen, da die query sowies nur eine row zurückgibt

          Kommentar


          • #6
            Stimmt. Die Sortierung braucht nur unnötig speed.
            Aber wenn ich mich nicht irre, sollte das LIMIT 1 dabei stehen, da MySQL dann sofort weiß, nach dem einen Satz ist Schluß, was eher die REs wieder frei gibt.
            Danke!

            Kommentar

            Lädt...
            X