2017-04-19 2 views
0
$pdo = $db->query('SELECT * FROM data ;'); 
$total = $pdo->rowCount(); 
echo $total; 

Das Ergebnis ist zum Beispiel 3.Wie kann ich verschiedene mysql Zeilen in einer Datenbankanfrage zählen?

Aber ich habe eine Spalte namens "done" in der mySQL-Datenbank, wo der mögliche Wert 1 oder 0 ist. Ich möchte jetzt alle Zeilen mit dem Wert 1 zählen. Also, wenn es zum Beispiel insgesamt 9 Elemente in der Datenbank vorhanden ist und von ihnen drei Teilen mit dem Wert 1 dann sollte das Ergebnis sein:

3/9

Ich weiß nur wissen, wie das mit einer zweiten Datenbank Anfrage zu tun

$pdo = $db->query('SELECT * FROM data WHERE done = "1" ;'); 
$done = $pdo->rowCount(); 

echo $done."/".$total; 

Aber ich fragte mich, ob dies in nur einer Datenbankanforderung möglich ist.

+1

Vorsicht, 'rowcount()' ist in allen Datenbanken für SELECT-Anweisungen nicht konsistent - http://php.net/manual/en/pdostatement.rowcount.php – WillardSolutions

Antwort

1

MySQL Ausdrücke in SUM unterstützt, so dass, wenn Ihr bei der eine Gesamtzählung und eine gefilterte Zählung zu erhalten suchen gleichzeitig können Sie dies tun:

SELECT COUNT(*) as totalCount, SUM(`done`=1) as completeCount FROM `data` 

Sie auch bei Bedarf in der "nicht getan" zählen hinzufügen:

SELECT COUNT(*) as totalCount, SUM(`done`=1) as completeCount, SUM(`done`=0) as incompleteCount FROM `data` 

mit Ihrem Code:

$query = 'SELECT COUNT(*) as total, SUM(`done`=1) as complete FROM `data`'; 
$pdo = $db->query($query); 
$data = $pdo->fetch(); // Uses PDO::FETCH_BOTH by default 
echo $data['complete']."/".$data['total']; 
+0

Sieht gut aus. Wie führe ich das Ergebnis aus? '$ result = $ pdo-> fetchAll();' und dann 'foreach ($ result als $ row) {echo $ row ['totalCount'];}'? – Jarla

+0

Ich habe es getestet, aber nicht das Ergebnis bekommen. Ich muss irgendwo einen Fehler machen. Lass es mich wissen, wenn ich es gelöst habe – Jarla

+0

@Jarla hinzugefügt ein Beispiel – Lee

4

Versuchen Sie, diese für die Abfrage und erhalten die Informationen aus den Ergebnissen (nicht Zählung Zeile)

SELECT `done`, count(*) as `numrows` FROM `data` GROUP BY `done`; 
+0

Danke. Ich habe es getestet. Kann einfach nicht von dort nach 3/9 kommen. Ich bekomme etwas wie 0101010101 – Jarla

+0

Sie sind wahrscheinlich das Objekt selbst widerhallen, nicht die Ergebnisse. Sie müssen die Ergebnisse abrufen. – WillardSolutions

Verwandte Themen