Abfragung per Mysql wieviel Spieler derzeit Registriert sind

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey nach langer Zeit will ich auch mal wieder Scripten :D
    Undzwar wollte ich fragen wie ich eine Abfrage machen kann (am besten ja aus der Mysql Datebank)
    wie viele Spieler derzeit registriert sind.


    Ich benutze MySQL plugin R39-5




    Mfg.


    Aerox

  • Code
    mysql_query("SELECT * FROM spielerliste");
    mysql_store_result();
    new anzahl = mysql_num_rows();

    Je nach mySQL Plugin kann das wohl etwas variieren.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • mysql_pquery(connectionVariable, "SELECT * FROM spielerliste", "GetPlayerCount");forward GetPlayerCount();public GetPlayerCount(){new rows = cache_num_rows(); // <--}

    Ok und wie müsste ich die Datebank dafür machen wo er es rauslesen kann ? stehe grade etwas auf dem Schlauch =D

  • Wenn es dir wirklich nur darum geht, die Anzahl der Einträge einer Tabelle (in diesem Fall der Spieler) zu zählen, würde ich auf die COUNT() Funktion zurückgreifen. Durch die jetzige Variante werden sämtliche Datensätze der Tabelle an den Server gesendet und dann von diesem durchgezählt - sofern die Daten nicht ausgegeben werden, wäre die Zählung per COUNT() besser.


    Der Query würde dann folgend aussehen:

    SQL
    SELECT COUNT(*) AS player_count FROM `spielerliste`

    INFO: Du kannst auch statt COUNT(*) dein primary key (z.B. id) verwenden => COUNT(id).


    Code
    cache_get_field_content_int(0, "player_count");

    Beinhaltet dann die Anzahl der Einträge in der Tabelle.


  • new GetGuys = 0; //oben ins script
    stock GetRegisteredGuy() //Zählen
    {
    mysql_pquery(dbhandle, "SELECT * FROM `accounts`", "@UpdateGuys", "");
    return 1;
    }
    @UpdateGuys();
    @UpdateGuys() //Updaten
    {
    cache_get_row_count(GetGuys);
    return 1;
    }


    Musst du halt noch auf deinen Code anpassen, nutzen lässt sich das ganze recht einfach.



    ocmd:getregguys(playerid)
    {
    new string[64]; //string erstellen
    GetRegisteredGuys(); //Accounts zählen lassen und in variable 'GetGuys' setzen
    format(string, sizeof string, "Auf dem Server sind derzeit %d Spieler.", GetGuys), //String formatieren
    SendClientMessage(playerid, -1, string); //Nachricht in weis ausgeben
    return 1;
    }

  • Bitte auf keinen Fall einen SELECT * ohne Bedingung auf die komplette Tabelle machen, das ist komplett am Sinn vorbei und überhaupt nicht performant! Wenn in der Datenbank 50.000 registrierte Spieler stehen, dann werden alle 50.000 Datensätze an den Server gesendet, das macht keinen Sinn.


    Um nur die Anzahl der Datensätze zu erhalten, reicht es, wie Douq auch schon sagte, einen SELECT COUNT zu machen, damit bekommt man genau einen Datensatz mit einem Wert zurück, anstatt die komplette Tabelle.

  • Bitte auf keinen Fall einen SELECT * ohne Bedingung auf die komplette Tabelle machen, das ist komplett am Sinn vorbei und überhaupt nicht performant! Wenn in der Datenbank 50.000 registrierte Spieler stehen, dann werden alle 50.000 Datensätze an den Server gesendet, das macht keinen Sinn.


    Um nur die Anzahl der Datensätze zu erhalten, reicht es, wie Douq auch schon sagte, einen SELECT COUNT zu machen, damit bekommt man genau einen Datensatz mit einem Wert zurück, anstatt die komplette Tabelle.

    Danke für die Korrektur, schon richtig was du schreibst, Jeffry :thumbup: