Guten Tag,
ich wollte mal Fragen, wie ich die anzahl der Tabellen (user) zählen kann, und so ala String wiedergeben kann? (Aktuell sind xyz User registriert!)
mfg,
Montero
Guten Tag,
ich wollte mal Fragen, wie ich die anzahl der Tabellen (user) zählen kann, und so ala String wiedergeben kann? (Aktuell sind xyz User registriert!)
mfg,
Montero
mysql_query("SELECT `userId` FROM `users`");
mysql_store_result();
printf("Es sind %d Spieler registriert", mysql_num_rows());
mysql_free_result();
userId ist das Feld deines auto incremented primary keys. Dient einfach nur dazu, der mySQL nicht unnötig Arbeit aufzuhalsen. Da du für die Anzahl der User nicht die alle Felder abfragen musst (*) sondern eines reicht (da bietet die Normalisierung nunmal PRIMARY KEYs als Erstes an), fragst du einfach irgendein Feld ab, da der Wert darin sowieso völlig irrelevant ist.
aaah! Danke! Vielen Dank!
LeijaT: Mir wird nun immer angezeigt, dass es -1 User auf dem Server gibt. Wo ist der Fehler?
Mein Code:
if(strcmp("/countuser", cmd, true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] >= 2)
{
mysql_query("SELECT `SQLid` FROM `users`");
mysql_store_result();
printf("Es sind %d Spieler registriert", mysql_num_rows());
mysql_free_result();
new stringAWarnung[128];
format(stringAWarnung, sizeof (stringAWarnung), "{ACFA58}Adminbefehl:{FFFFFF} Es sind insgesamt {ACFA58}%d{FFFFFF} User registriert.", mysql_num_rows());
SendAdminMessage(COLOR_KEINADMIN,1, stringAWarnung);
}
}
return 1;
}
userId ist das Feld deines auto incremented primary keys. Dient einfach nur dazu, der mySQL nicht unnötig Arbeit aufzuhalsen. Da du für die Anzahl der User nicht die alle Felder abfragen musst (*) sondern eines reicht (da bietet die Normalisierung nunmal PRIMARY KEYs als Erstes an), fragst du einfach irgendein Feld ab, da der Wert darin sowieso völlig irrelevant ist.
Da hätte ich auch eine Frage:
Bei den meisten bzw. die Autoincrement fängt meist immer mit 200 an, da geht doch das zählen schlecht bzw. da musst man doch dann -200 machen oder ?
Der Fehler liegt darin, dass du mysql_num_rows() aufrufst, nachdem du das Ergebnis via mysql_free_result(); schon wieder freigegeben hattest. Das darf natürlich nicht sein :p
Danke für den Tipp, Ich teste es mal aus.
Da hätte ich auch eine Frage:
Bei den meisten bzw. die Autoincrement fängt meist immer mit 200 an, da geht doch das zählen schlecht bzw. da musst man doch dann -200 machen oder ?
Es geht nicht darum was in der Spalte steht sondern wie viele Zeilen es sind, die beim Query zurückgegeben werden.
Deshalb ist es egal ob du die ID oder den Namen nimmst den du abfragst.
ist es nicht möglich, alle Tabellen zu zählen in der Datenbank "users"? oder tut das dein bsp? Das mit userId verstehe ich jedoch nicht.
LeijaT: und du, ich glaube, ihr redet aneinander vorbei - oder?
Montero, meinst du die Datensätze in der Tabelle "users" oder die Datenbanktabelle der Datenbank "users"?
Denn dein Satz, oben, sagt was anderes aus, als LeijaT dir hier zeigt, wenn mich nicht alles täuscht...
Außerdem fängt ein auto_incremented primary key immer bei 1 an. Wenn das bei dir nicht der Fall ist, hast du was falsch gemacht :p
Ich möchte nur rausfinden, wie viele registrierte Spieler es gibt. Ich habe eine Tabelle die heißt Users, und in der Tabelle sind viele Zeilen an User. Und diese Zeilen will ich halt zählen...
Ok, dann ist der Code von LeijaT richtig, nur hast du dich nicht richtig ausgedrückt.
es funktioniert! Danke Leijat!
mysql_num_rows() gibt immer die Anzahl der Zeilen wieder, die zu der Query passen. Also musst du einfach eine Query nehmen die irgentwas von allen Zeilen wiedergibt zum Beispiel: SELECT * FROM Tabelle.
Mehr ist das nicht.
mysql_num_rows() gibt immer die Anzahl der Zeilen wieder, die zu der Query passen. Also musst du einfach eine Query nehmen die irgentwas von allen Zeilen wiedergibt zum Beispiel: SELECT * FROM Tabelle.
Mehr ist das nicht.
Und bevor sich wieder irgendein Neuling deinen Nonsens abguckt, stellen wir hier direkt mal klar, dass man bei sowas kein * benutzt, da * (für Info an die Anfänger) für ALLE FELDER steht und dadurch unnötig große Belastung für das Script entsteht. Da sowieso nur die Zeilen gezählt werden, reicht es ein x-beliebiges Feld zu nehmen.
Das stimmt, es sollte ein Beispiel sein. Ein sehr schlecht gewähltes..
SELECT `FELD` FROM `TABELLE`
Und bevor sich wieder irgendein Neuling deinen Nonsens abguckt, stellen wir hier direkt mal klar, dass man bei sowas kein * benutzt, da * (für Info an die Anfänger) für ALLE FELDER steht und dadurch unnötig große Belastung für das Script entsteht. Da sowieso nur die Zeilen gezählt werden, reicht es ein x-beliebiges Feld zu nehmen.
Was wenn man "NULL" benutzt? (BSP: "SELECT NULL FROM table")
Was wenn man "NULL" benutzt? (BSP: "SELECT NULL FROM table")
Auch machbar, tut sich in Punkto Geschwindigkeit aber nichts.