hawkmaster: Anzahl zählen, Welche Methode ist besser?

Hallo zusammen,
ich möchte herausfinden wieviel User in deiner Tabelle sind.
Man könnte es wie folgt machen:
$sqluser = $DBO->query("SELECT count(*) as anzahl FROM test_user");
$sql_datauser = $sqluser->fetch(PDO::FETCH_ASSOC);
echo "es gibt Anzahl user in db: " . $sql_datauser['anzahl'] . "<br><br>";
$sqluser = $DBO->query("SELECT usr FROM test_user");
$sql_datauser = $sqluser->fetchAll();
echo "es gibt Anzahl user in db: " . count($sql_datauser);

Ist die erste Variante mit "Select count(*)" event. besser?

wenn man den "Select count(*)" ohne dem "as anzahl" machen würde.
Wie könnte man dann eigentlich die Menge herausbekommen?

vielen Dank und viele Grüße
hawk

  1. Hi,

    Ist die erste Variante mit "Select count(*)" event. besser?

    ja. Das DBMS braucht kein komplettes Resultset mit allen Zeilen bereitzustellen, und der Client braucht sie nicht alle abzuholen.

    wenn man den "Select count(*)" ohne dem "as anzahl" machen würde.
    Wie könnte man dann eigentlich die Menge herausbekommen?

    Indem Du den ersten (und einzigen) Datensatz ausliest und dessen "anzahl"-Spalte ermittelst. Ohne das "AS anzahl" wäre es einfach die erste (und einzige) Spalte, die je nach Schnittstelle auch einen Namen besitzt.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah,
      danke für die Infos.

      Indem Du den ersten (und einzigen) Datensatz ausliest und dessen "anzahl"-Spalte ermittelst. Ohne das "AS anzahl" wäre es einfach die erste (und einzige) Spalte, die je nach Schnittstelle auch einen Namen besitzt.

      hmm, irgendwie steht mir einer auf der Leitung.
      Wie müsste denn dann das fetch aussehen bzw wie kann ich denn dann das array ansprechen ($sql_datauser)?

      $sqluser = $DBO->query("SELECT count(*) FROM test_user");
      $sql_datauser = $sqluser->fetch(PDO::FETCH_ASSOC);
      echo "es gibt Anzahl user in db: " . $sql_datauser??? . "<br><br>";

      vielen Dank und viele Grüße
      hawk

      1. Hi,

        Wie müsste denn dann das fetch aussehen bzw wie kann ich denn dann das array ansprechen ($sql_datauser)?
        $sqluser = $DBO->query("SELECT count(*) FROM test_user");
        $sql_datauser = $sqluser->fetch(PDO::FETCH_ASSOC);

        diesen Code hast Du doch irgendwoher. Was hast Du denn dort für Informationen darüber gefunden, wie auf die Inhalte zugegriffen wird?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Warum beantwortest du eine Frage immer mit einer Gegenfrage?
          Ich kenne den Self Gedanken schon.

          und nein,
          den Code habe ich nicht irgendwoher ich habe ihn selbst geschrieben.
          Natürlich habe ich mir Beispiele angeschaut.
          Diese waren aber immer mit "as xxx".
          und so habe ich ja auch keine Probleme damit.

          Ich würde nur gerne wissen wie ich denn den fetch bzw. das ergebnis ohne das "as" anspreche?

          vielen Dank und viele Grüße
          hawk

          1. Moin Moin!

            Warum beantwortest du eine Frage immer mit einer Gegenfrage?

            Stört dich das?

            Ich kenne den Self Gedanken schon.

            und nein,
            den Code habe ich nicht irgendwoher ich habe ihn selbst geschrieben.
            Natürlich habe ich mir Beispiele angeschaut.
            Diese waren aber immer mit "as xxx".

            Also abgeschrieben.

            Ich würde nur gerne wissen wie ich denn den fetch bzw. das ergebnis ohne das "as" anspreche?

            Das steht in der Dokumentation. Perls DBI hat fetchrow_hashref() und fetchrow_arrayref(), um eine Referenz auf ein Array (mit den Spaltenwerten in Reihenfolge der SQL-Abfrage) bzw. eine Referenz auf ein Hash (mit Spaltennamen und Spaltenwerten) zu liefern. Von da aus greift man ganz natürlich per 0-basierten Index oder per Spaltennamen auf das Ergebnis zu. Andere Systeme (die Häufigkeit von $ spricht für PHP, da keine DBI-typischen Namen auftauchen) sollten ähnliche Mechanismen haben, die in aller Regel dokumentiert sind.

            Alexander

            --
            Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
          2. Hi,

            Warum beantwortest du eine Frage immer mit einer Gegenfrage?

            tu ich das?

            Ich kenne den Self Gedanken schon.

            Das will ich nicht mal bestreiten. Wenn allerdings ein kurzer Blick in die zugehörige Dokumentation ausreicht, um Deine Frage zu beantworten, dann musst Du schon damit rechnen, hier nicht mehr als einen strengen Fingerzeig zu bekommen.

            Ich würde nur gerne wissen wie ich denn den fetch bzw. das ergebnis ohne das "as" anspreche?

            Was hat Deine Analyse des Resultset-Objektes ergeben?

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Moin Moin!

              Warum beantwortest du eine Frage immer mit einer Gegenfrage?

              tu ich das?

              He, machst Du mich nach?

              Alexander

              --
              Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
  2. echo $begrüßung;

    ich möchte herausfinden wieviel User in deiner Tabelle sind.

    Das sag ich dir aber nicht. :-)

    Ist die erste Variante mit "Select count(*)" event. besser?

    Das hat Cheatah ja schon bejaht.

    wenn man den "Select count(*)" ohne dem "as anzahl" machen würde.
    Wie könnte man dann eigentlich die Menge herausbekommen?

    Du solltest nicht davon ausgehen, dass jeder weiß, dass du mit PHPs PDO arbeitest. Deswegen hat dir Cheatah sicher auch nur die allgemeingültige aber unspezifische Antwort geben können. Um auf einzelne Spalten zuzugreifen eignet sich PDOStatement->fetchColumn(). Das holt vom nächsten Datensatz den Wert genau einer Spalte. Ansonsten gibt es die allgemeine Methode PDOStatement->fetch(), der man verschiedene Werte für den Parameter fetch_style übergeben kann. PDO::FETCH_NUM wäre der für deine Fall wohl ein passender.

    echo "$verabschiedung $name";

    1. Hallo dedlfix,
      vielen Dank für deine Tipps.

      ich bin davon ausgegangen das man anhand des Code Beispiels z.b.
      ..$sqluser->fetch(PDO::FETCH_ASSOC);
      sieht das es um PDO geht.
      Aber vielleicht hätte ich das einleitend sagen sollen.

      Ich habe das Zählen ja auch hinbekommen mit "count(*) an anzahl"
      Ich wollte eigentlich nur wissen wie man das Ergebnis bzw. den Fetch ohne das "as" ansprechen kann.

      $sqluser = $DBO->query("SELECT count(*) FROM test_user");
      $sql_datauser = $sqluser->fetch(PDO::FETCH_ASSOC);
      echo "es gibt Anzahl user in db: " . $sql_datauser??? . "<br><br>";

      viele Grüße
      hawk

      1. Hallo,

        $sql_datauser = $sql_user->fetch(PDO::FETCH_NUM); gibt dir ein Array der Felder des nächsten Datensatzes zurück, also da dein Resultset nur eine Spalte hat, hat $sql_datauser nur ein Element am Index 0

        --> $sql_datauser[0]   beinhaltet deinen gewünschten Wert

        Wenn du das Feld benannt/aliasiert hättest über AS [i]columnalias[/i] dann hätte dir fetch(PDO::FETCH_ASSOC); eine Art Dictionary zurückgegeben wo du über den Key [i]columnalias[/i] den Wert hättest aus $sql_datauser lesen können:

        $sql_datauser['[i]columnalias[/i]]  hätte deinen gewünschten Wert beinhaltet

        Reicht das zur Erläuterung? Zmd so habe ich es dedlfixens Erklärung entnommen und hätte es für mich probierenderweise mal umgesetzt, wo ich mit PHP und PDO eigentlich NULL auskenne.

        Gruss, Frank

        1. Hallo Frank,
          vielen Dank für deine Hilfe.

          --> $sql_datauser[0]   beinhaltet deinen gewünschten Wert

          hmm, das hatte ich versucht. Muss ich nochmals checken.

          $sql_datauser['[i]columnalias[/i]]  hätte deinen gewünschten Wert beinhaltet

          ja, das sagte ich ja, so hatte ich es sofort hinbekommen mit
          $sql_datauser['anzahl'] in Verbindung mit "as anzahl".

          Reicht das zur Erläuterung? Zmd so habe ich es dedlfixens Erklärung entnommen und hätte es für mich probierenderweise mal umgesetzt, wo ich mit PHP und PDO eigentlich NULL auskenne.

          ja, vielen dank nochmals.

          vielen Dank und viele Grüße
          hawk

          1. --> $sql_datauser[0]   beinhaltet deinen gewünschten Wert
            hmm, das hatte ich versucht. Muss ich nochmals checken.

            dazu musst du aber wohl auch PDO::FETCH_NUM beim Fetch als Option/Style verwenden?

            Ciao, Frank