items: Problem mit "SELECT COUNT('xy')..." im query

Hallo Forum,
über eine Funktion versuche ich die Anzahl der Zeilen einer Tabelle unter MySQL auszulesen. Es gelingt mir aber nicht, mir den Wert ausgeben zu lassen, sondern ich erhalte immer nur die Ausgabe "Resoure id #2".

Ich habe mal ein bißchen gegoogelt und es scheint so, als sei die Meldung "Resource id #2" ein Hinweis darauf, das die Abfrage erfolgreich war (bzw. eine Referenz auf den Speicher). Aber wie schaffe ich es, mir den Zahlenwert ausgeben zu lassen?
Die Funktion sieht so aus:

------------------------------------------------

function  maxAnzahl($dbname){
 $sql = "SELECT COUNT('id') FROM user";
 $anzahl = mysql_db_query("$dbname",$sql);
echo anzahl."<br>";
 }

--------------------------------------------------

Kann mir jemand weiterhelfen? Wenn ich "SELECT COUNT('id')FROM user" als SQL Statement in der MySQL Konsole eingebe, erscheint das Ergebnis und gibt mir die richtige Anzahl aus. Aber wie kriege ich das als Zahl in PHP ausgegeben?

Vielen Dank und Gruesse
items

  1. Hallo,

    Ich habe mal ein bißchen gegoogelt und es scheint so, als sei die Meldung "Resource id #2" ein Hinweis darauf, das die Abfrage erfolgreich war (bzw. eine Referenz auf den Speicher). Aber wie schaffe ich es, mir den Zahlenwert ausgeben zu lassen?

    Wahlweise mit den Funktionen
    mysql_fetch_rows()
    mysql_fetch_array()
    mysql_result()

    Siehe http://www.selfphp4.de/funktionsuebersicht/mysql_funktionen.php
    oder
    http://www.zugeschaut-und-mitgebaut.de/php/m.html

    MfG, Thomas

    1. mysql_fetch_rows()

      Korrektur:
      mysql_fetch_row()

      MfG, Thomas

    2. Hi,
      yo. Danke.Die Funktionen hatte ich auch schon. Wenn ich das über "mysql_num_rows()" mache, funzt das auch. Aber ich dachte über "COUNT" wird einem direkt der die Anzahl der records ausgegeben. Oder funzt das nur über die Konsole?

      Grüße
      Ralf

      1. Moin

        yo. Danke.Die Funktionen hatte ich auch schon. Wenn ich das über "mysql_num_rows()" mache, funzt das auch. Aber ich dachte über "COUNT" wird einem direkt der die Anzahl der records ausgegeben. Oder funzt das nur über die Konsole?

        Klar wird einem direkt die Anzahl der records ausgegeben ... als SQL-Ergebnis. Du musst also nach wie vor genau das machen, was du auch machen würdest als wenn du ein Select das dir nur eine Zelle zurückgibt ausgeführt hättest (weil du genau das ja getan hast). Das kann die Funktion doch nicht riechen dass da nur eine Zelle rauskommen kann.

        --
        Henryk Plötz
        Grüße aus Berlin

        1. Moin!

          Ging das nicht auch mit

          SELECT COUNT('id') AS irgendwas FROM user

          echo $irgenwas

          also doch ohne besagte Funktionen?

          Grüße
            Andreas

          1. Moin

            Ging das nicht auch mit
            SELECT COUNT('id') AS irgendwas FROM user
            echo $irgenwas

            Nein

            --
            Henryk Plötz
            Grüße aus Berlin

            1. denn so?

              $query = "SELECT COUNT('id') AS irgendwas FROM user";
              mysql_num_rows($query);
              echo $irgenwas

              ?

              Sorry aber der Einsatz von AS ist mir nicht wirklich klar;)

              Andreas

              1. Moin

                $query = "SELECT COUNT('id') AS irgendwas FROM user";
                mysql_num_rows($query); // Das ergibt Mist in der Art von "... is not a result ressource"
                echo $irgenwas // Das ergibt den Wert von $irgenwas und evt. einen Syntax-Error wegen eines fehlenden ;

                AS ist nur dafür da die Ergebnisse zu benennen damit du dich später darauf berufen kannst. Beispiel SELECT hallo FROM bla WHERE hallo='ha' und SELECT hallo AS huhu FROM bla WHERE huhu='ha' geben die gleichen Ergebnisse. Das funktioniert auch mit Gruppenfunktionen, wie dieses Beispiel aus der MySQL-Hilfe zeigt: SELECT user, MAX(salary) AS sum FROM users GROUP BY user HAVING sum>10 welches dem Maximalgehalt eines Users den Alias sum (über den Sinn dieser Query könnte man jetzt streiten :) zuordnet und den dann nochmal hinten verwendet.
                AS ist also erst mal nur für deine SQL-Queries interessant und nicht für die Sprache aus der du die Queries auslöst. Weiterhin werden die mit AS zugewiesenen Aliase auch bei der Ausgabe benutzt. Auf der MySQL-Kommandozeile steht also (bei der zweiten Query meines ersten Beispiels) huhu über der Spalte in der Ausgabe drüber, statt hallo. In PHP ist dann die Spalte ebenso umbenannt.

                Richtig wäre also (unter anderem):
                $res = mysql_query("SELECT COUNT(id) AS irgendwas FROM user");
                $a = mysql_fetch_array($res);
                echo $a["irgendwas"];

                BTW: Das steht alles im Manual.

                --
                Henryk Plötz
                Grüße aus Berlin

                1. Hi!

                  Vielen Dank! Nun ja, damit wäre das endgültig geklärt - Danke!

                  Grüße
                    Andreas