Anzahl zählen, Welche Methode ist besser?
hawkmaster
- datenbank
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
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
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
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
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
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
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
Moin Moin!
Warum beantwortest du eine Frage immer mit einer Gegenfrage?
tu ich das?
He, machst Du mich nach?
Alexander
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";
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
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
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
--> $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