Hey nach langer Zeit will ich auch mal wieder Scripten
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
Hey nach langer Zeit will ich auch mal wieder Scripten
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
Kannst du mir eventuell ne kleine Vorlage geben habe längere Zeit nichts mehr gemacht.
mysql_pquery(connectionVariable, "SELECT * FROM spielerliste", "GetPlayerCount");
forward GetPlayerCount();
public GetPlayerCount()
{
new rows = cache_num_rows(); // <--
}
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:
INFO: Du kannst auch statt COUNT(*) dein primary key (z.B. id) verwenden => COUNT(id).
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