PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

Gefundene Einträge zählen mittels COUNT

10. Februar 2020
  1. Home
  2. »
  3. MySQL Tutorial
  4. »
  5. Gefundene Einträge zählen mittels COUNT

Es kann vorkommen, dass ihr die Anzahl der Datenbankeinträge zählen möcht, beispielsweise um die Anzahl an Produkten die ihr in einem Online-Shop habt auszugeben. Dafür gibt es tendenziell zwei Möglichkeiten: Eine Möglichkeit direkt in PHP mittels der Methode $statement->rowCount() oder mittels dem SQL-Befehl COUNT ,

Inhaltsverzeichnis

  • 1 Einträge zählen mittels rowCount()
  • 2 Einträge zählen mittels COUNT()
  • 3 Anzahl eindeutiger Einträge
  • 4 Einträge nach Kriterien gruppieren

Einträge zählen mittels rowCount()

Möchtet ihr die Anzahl der Datensätze zählen die eine gewisses Query geliefert hat, so könnt ihr die PDO-Methode $statement->rowCount() verwenden:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
  
$statement = $pdo->prepare("SELECT * FROM users WHERE vorname = ?");
$statement->execute(array('Max')); 
$anzahl_user = $statement->rowCount();
echo "Es wurden $anzahl_user Benutzer gefunden";
?>

Dies funktioniert nicht nur für SELECT-Anweisungen, sondern auch für UPDATE- und DELETE-Anweisungen:

1
2
3
4
5
6
7
8
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
  
$statement = $pdo->prepare("DELETE FROM users WHERE vorname = ?");
$statement->execute(array('Max'));
$anzahl_user = $statement->rowCount();
echo "Es wurden $anzahl_user Benutzer gelöscht";
?>

Hinweis: Die PDO-Methode rowCount() wird in PHP ausgeführt. Wenn ihr also nach einer SELECT-Anweisung das rowCount() durchführt, dann wurden zuerst alle Daten von der Datenbank an PHP gesendet und dort werden die Datensätze gezählt. Angenommen ihr habt ein Forum mit 100.000 Posts und ihr wollt die Anzahl der Posts zählen, dann würde mit dieser Variante alle 100.000 Posts ausgelesen werden, von der Datenbank an PHP gesendet werden und dort gezählt werden. Dies ist natürlich extremst langsam. Deswegen solltet ihr diese Variante nur nutzen, wenn ihr vorhabt die Daten auch auszugeben. Ansonsten verwendet lieber den SQL-Befehl COUNT(), denn dort zählt MySQL die Anzahl der Datensätze.

Einträge zählen mittels COUNT()

Um das zuvor beschriebene Problem mit großen Datentabellen zu umgehen existiert der SQL-Befehl COUNT . Mit diesem weist ihr die MySQL-Datenbank an, die Datensätze eurer Tabelle zu zählen und es wird nur das Ergebnis zurückgeliefert. Dies verursacht natürlich deutlich weniger Traffic zwischen dem MySQL-Server und dem Webserver, wenn statt dem Inhalt aller 100.000 Posts nur die Zahl 100.000 übergeben wird. Ebenfalls kann MySQL in vielen Fällen deutlich effizienter die Anzahl der Datensätze bestimmten, und zwar wenn Indices genutzt werden (mehr dazu im Artikel Optimierung von MySQL: Verwendung des Index).

Um die Gesamtanzahl der Datensätze zu bekommen könnt ihr folgenden SQL-Anweisung ausführen:

1
SELECT COUNT(*) AS anzahl FROM users

In PHP und PDO eingebettet sieht dies dann wie folgt aus:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

$statement = $pdo->prepare("SELECT COUNT(*) AS anzahl FROM users");
$statement->execute();  
$row = $statement->fetch();
echo "Es wurden ".$row['anzahl']." User gefunden";
?>

Zuerst bereiten wir unsere Anfrage mittels Prepared Statements vor. Eine Neuheit bei dem SQL-Query is die Verwendung des Befehls AS. Damit benennen wir das Ergebnis der COUNT(*)-Operation um in den Namen anzahl. Im weiteren Code können wir dann auf anzahl ganz gewöhnlich zugreifen wie auf andere Spalten auch. Danach wird der Befehl mittels execute() ausgeführt und mittels fetch() holen wir uns das Ergebnis zurück. Danach können wir die Anzahl ausgeben.

Natürlich können wir auch beliebige WHERE-Argumente nutzen, um unsere Query einzuschränken. Um die Anzahl der User die 'Max' heißen herauszufinden kann man folgenden Code nutzen:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

$statement = $pdo->prepare("SELECT COUNT(*) AS anzahl FROM users WHERE vorname = ?");
$statement->execute(array('Max'));  
$row = $statement->fetch();
echo "Es wurden ".$row['anzahl']." User gefunden";
?>

Anzahl eindeutiger Einträge

Mittels dem DISTINCT Befehl können wie in Komplexere Datenabfrage per SELECT beschrieben doppelte Einträge vermieden werden. Möchtet ihr also herausfinden wie viele unterschiedliche Vornamen in eurer User-Tabelle vorkommen, so sieht der passende SQL-Befehl dazu wie folgt aus:

1
SELECT COUNT(DISTINCT vorname) AS anzahl FROM user

Ihr könnt auch mehrere Spalten angeben. MySQL Filter dann nur die Zeilen raus, bei denen alle Spalten gleich sind. Der folgende SQL-Query liefert z.B. die Anzahl der unterschiedlichen Vor- und Nachnamen in eurer Tabelle:

1
SELECT COUNT(DISTINCT vorname, nachname) AS anzahl FROM user

Max Mustermann und Petra Mustermann würden hier als zwei verschiedene Einträge gezählt werden.

Einträge nach Kriterien gruppieren

Mittels GROUP BY können wir unseren COUNT-Befehl nach gewissen Kriterien sortieren, z.B. die häufigsten Nachnamen herauszufinden:

1
SELECT nachname, COUNT(*) AS anzahl FROM users GROUP BY nachname

Hier geben wir die Spalte nachname und die Anzahl aus, dabei wird nach der der Spalte nachname gruppiert. D.h. am Ende erhalten wie einen Überblick mit der Anzahl der Benutzer mit dem gleichen Nachnamen.

In PHP mit PDO sieht das ganze wie folgt aus:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

$statement = $pdo->prepare("SELECT nachname, COUNT(*) AS anzahl FROM users GROUP BY nachname ORDER BY anzahl DESC");
$statement->execute();  
while($row = $statement->fetch()) {
  echo $row['nachname'].": ".$row['anzahl']." User<br />";
}
?>

Natürlich lässt sich dies auch mit WHERE verbinden, wenn wir z.B. nur gewisse Einträge zählen möchte. Folgender SQL-Query zählt die Benutzer gruppiert nach nachname für die Personen die Max mit Vorname heißen:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

$statement = $pdo->prepare("SELECT nachname, COUNT(*) AS anzahl FROM users WHERE vorname = ? GROUP BY nachname");
$statement->execute(array('Max'));  
while($row = $statement->fetch()) {
  echo $row['nachname'].": ".$row['anzahl']." User<br />";
}
?>

Die GROUP BY-Anweisung ist praktisch, wenn ihr schnell Statistiken zu eurer Tabelle erstellen wollt, beispielsweise eine Statistik der Anzahl der neuen Nutzer pro Monat.

Autor: Nils Reimers
Zurück: Daten löschen mittels DELETE
Weiter: DATE-Datenbankspalten

MySQL Tutorial

  • MySQL installieren und starten
  • phpMyAdmin
  • Verbindung aufbauen
  • Simple Datenabfrage
  • Komplexere Datenabfrage
  • Prepared Statements
  • Daten einfügen
  • Daten aktualisieren
  • Daten löschen
  • Gefundene Einträge zählen
  • DATE-Datenbankspalten
  • Datum- und Zeitfunktionen
  • MySQL Fehlermeldungen
  • Datenbankverbindung schließen
  • JOIN
  • Indizes
  • Normalformen
  • Fremdschlüssel
  • Übersicht SQL-Befehle
  • Crashkurs MySQL
  • Crashkurs MySQLi
  • Crashkurs PDO
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur

Hoster – Geringste Ausfallzeit

  1. webgo Ø 0 Min.
  2. netcup Ø 0 Min.
  3. All-Inkl.com Ø 3 Min.
  4. Linevast Ø 3 Min.
  5. checkdomain Ø 5 Min.
  6. dogado Ø 6 Min.
  7. Strato Ø 8 Min.
  8. manitu Ø 9 Min.
  9. 1&1 Ø 10 Min.
  10. DomainFactory Ø 14 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2025

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}