MySQL Rows Zählen

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
  • mysql_query("SELECT `userId` FROM `users`");
    mysql_store_result();
    printf("Es sind %d Spieler registriert", mysql_num_rows());
    mysql_free_result();


    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'

  • 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.


    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'

  • 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;
    }

    Einmal editiert, zuletzt von Montero ()

  • 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 ?

    MFG

  • 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


    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'


  • 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


    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_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.


    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'

  • 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")