Ankündigung

Einklappen
Keine Ankündigung bisher.

[MYSQL] Seite mit Highscore-Listen, Rangabfrage

Einklappen

Neue Werbung 2019

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

  • [MYSQL] Seite mit Highscore-Listen, Rangabfrage

    HI,

    ich bin dabei ein Highscore-System für eine Flashgameseite zu machen.

    ich hab also eine Tabelle

    user_score
    ==========
    user_id
    game_id
    score

    Nun will ich per SELECT-Abfrage rausfinden, auf welchem Platz in der Highscoreliste die Score eines bestimmten Spielers ist (WHERE user_id = 3 AND game_id = 523).

    Geht das so überhaupt? Ich habe keine Idee wie.

    Oder ist es besser/einfacher/performanter, gleich beim eintragen einer neuen Punktzahl den rank mitzuspeichern und die darunterliegenden ranks um eins zu erhöhen?

  • #2
    Zitat von stuntman_mike Beitrag anzeigen
    Geht das so überhaupt? Ich habe keine Idee wie.
    Ja


    Zitat von stuntman_mike Beitrag anzeigen
    Oder ist es besser/einfacher/performanter, gleich beim eintragen einer neuen Punktzahl den rank mitzuspeichern und die darunterliegenden ranks um eins zu erhöhen?
    Was hat das eine jetzt mit dem anderen zu tun?? Wieso, wie machst Du es den sonst?

    Wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Zitat von wolf29 Beitrag anzeigen
      Ja
      Super, und wie?

      Zitat von wolf29 Beitrag anzeigen
      Was hat das eine jetzt mit dem anderen zu tun?? Wieso, wie machst Du es den sonst?
      Wie du siehst, ist in meiner Tabelle keine Spalte für den Rang der Score innerhalb der Highscoreliste.
      Deshalb meine Frage, ob es sinnvoll wäre, diese Spalte hinzuzufügen oder ob man sie nicht braucht, weil man den Rang auch per SQL-Abfrage ermitteln kann.

      Kommentar


      • #4
        ohne das jetzt großartig getestet zu haben:
        Code:
        SELECT (@num := @num + 1) rank, s.user_id, s.game_id, s.score
        FROM user_score s, (SELECT @num := 0) x
        ORDER BY score;
        Gruß,

        Feeela
        Je grösser der Dachschaden, desto schöner der Ausblick zum Himmel. - [WIKI]Karlheinz Deschner[/WIKI]

        Kommentar


        • #5
          Geht das so überhaupt? Ich habe keine Idee wie.
          Eine sinnvolle Info wäre, wie die Scores entstehen.

          Oder ist es besser/einfacher/performanter, gleich beim eintragen einer neuen Punktzahl den rank mitzuspeichern und die darunterliegenden ranks um eins zu erhöhen?
          Das vergiss ganz schnell wieder.
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #6
            Zitat von feeela Beitrag anzeigen
            ohne das jetzt großartig getestet zu haben:
            Code:
            SELECT (@num := @num + 1) rank, s.user_id, s.game_id, s.score
            FROM user_score s, (SELECT @num := 0) x
            ORDER BY score;
            Sorry, raff ich nicht, was macht @num und := und "(SELECT @num := 0) x" ?


            Zitat von nikosch Beitrag anzeigen
            Eine sinnvolle Info wäre, wie die Scores entstehen.
            Die scores entstehen durch das spielen von Flashgames.
            Ein Spieler (z.b. user_id=5) spielt Flashgame "Soundso" (zb. game_id=66) und erzielt x Punkte (score).
            Das wird dann in user_score eingetragen.

            Kommentar


            • #7
              Wie soll denn bitte ein Highscore über verschiedene Spiele funktionieren. Klingt für mich ziemlich unsinnig.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Zitat von nikosch Beitrag anzeigen
                Wie soll denn bitte ein Highscore über verschiedene Spiele funktionieren. Klingt für mich ziemlich unsinnig.
                Hä?
                wie soll es denn sonst gehen, wenn du 10.000 Spiele in deiner Datenbank hast?

                Für jedes ne eigene Tabelle?

                Kommentar


                • #9
                  Einen Highscore kann man doch nur für ein Spiel erstellen. Man kann doch die Punkte beim Tetris nicht mit denen beim "Fang den Frosch" vergleichen.
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    Einen Highscore kann man doch nur für ein Spiel erstellen. Man kann doch die Punkte beim Tetris nicht mit denen beim "Fang den Frosch" vergleichen.
                    Das will ich ja auch garnicht.
                    siehe 1. Post:
                    WHERE user_id = 3 AND game_id = 523

                    Das ist ja der Witz an der Frage, wie bekomme ich den Rang einer Score für EIN BESTIMMTES SPIEL.

                    Kommentar


                    • #11
                      Da WHERE user_id = 3 AND game_id = 523 keinen Highscore, sondern nur einen bestimmten Wert adressiert, ist das aus Deiner Frage bisher nicht klar geworden.
                      [COLOR="#F5F5FF"]--[/COLOR]
                      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                      [COLOR="#F5F5FF"]
                      --[/COLOR]

                      Kommentar


                      • #12
                        Ist das denn wirklich so schwer zu verstehen?

                        Ich will wissen, an welchem Rang in der Highscore des Spieles mit der game_id = 523 der Spieler mit der user_id = 3 steht.

                        btw: pro Spieler und Spiel wird nur immer die höchste Punktzahl gespeichert

                        Kommentar


                        • #13
                          Zitat von stuntman_mike Beitrag anzeigen
                          Ich will wissen, an welchem Rang in der Highscore des Spieles mit der game_id = 523 der Spieler mit der user_id = 3 steht.
                          Dann sind zwei Schritte nötig:

                          1. Die Punkte ermitteln, die User #3 im Spiel #523 erreicht hat,
                          2. die Anzahl all der Nutzer ermitteln (COUNT), die im Spiel #523 mehr Punkte* erreicht haben

                          Das kann man beides einzeln machen (1. ermitteln, in Query für 2. einsetzen) - oder auch in einem Statement vereinen, mittels einer Subquery.


                          * oder ggf. gleich viel, das kommt auf die genauere Definition des Begriffes „Rang“ an.
                          [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                          Kommentar


                          • #14
                            Zitat von ChrisB Beitrag anzeigen
                            Dann sind zwei Schritte nötig:

                            1. Die Punkte ermitteln, die User #3 im Spiel #523 erreicht hat,
                            2. die Anzahl all der Nutzer ermitteln (COUNT), die im Spiel #523 mehr Punkte* erreicht haben

                            Das kann man beides einzeln machen (1. ermitteln, in Query für 2. einsetzen) - oder auch in einem Statement vereinen, mittels einer Subquery.


                            * oder ggf. gleich viel, das kommt auf die genauere Definition des Begriffes „Rang“ an.
                            Ok, wenn ich dann aber die Rankings EINES SPIELERS in ALLEN GAMES haben will, und diese nach dem jeweiligen Rang sortieren will, also so:
                            kurt - tetris - 1.platz
                            kurt - frogger - 3.platz
                            kurt - schach - 17. platz

                            Dann wären das doch ne Menge queries:
                            1. alle Spiele finden, in denen kurt ne highscore hat
                            2. pro Spiel einen query an welchem Rang er steht

                            Dann wärs evtl. doch sinnvoller, den Rang immer gleich in den scores upzudaten, und man könnte diese Infos mit einer Abfrage holen
                            SELECT * FROM user_data WHERE user_id = x ORDER BY rank

                            Die scores updaten müsste man dann so:
                            1. Abfragen, wieviele scores in dem Game besser sind als die, die eingetragen werden soll
                            2. score eintragen mit dem ermittelten rang
                            3. rang aller scores dieses games, die geringer sind, um 1 erhöhen

                            Oder ginge das einfacher?
                            Denke schon, dass die rank-update-Variante sinnvoller wäre, was meint ihr?

                            Kommentar


                            • #15
                              Zitat von stuntman_mike Beitrag anzeigen
                              Ok, wenn ich dann aber die Rankings EINES SPIELERS in ALLEN GAMES haben will [...] Dann wären das doch ne Menge queries
                              Sind ja auch 'ne Menge Daten

                              Denke schon, dass die rank-update-Variante sinnvoller wäre, was meint ihr?
                              Da müsstest du immer die Datensätze aller Spieler anpassen, wenn sich bei einem einzigen Spieler was ändert.
                              [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                              Kommentar

                              Lädt...
                              X