Wieviele Ergebnisse gefunden? (DB = mysql)
Tobias Kleeberger
- datenbank
0 Rouven0 dedlfix
0 Axel Richter
Hallo [smile]
Wie kann ich bitte herausfinden wieviele Ergebnisse eine Abfrage lieferte?
Zum einen möchte ich herausfinden, wieviele Einträge überhaupt in der Tabelle sind,
und zum anderen möchte ich herausfinden wieviele Eintrage auf ... WHERE city LIKE 'M%' geliefert werden.
Ich denke zwar an COUNT(), (keine AHnung ob COUNT(*) oder COUNT(id), mir ist der Unterschied nicht bewusst)
aber meines Erachtens darf man COUNT() so nicht anwenden,
weil COUNT() als "Aggregate Function" nur in Verbindung mit GROUP BY Verwendung finden darf.
Mein Ansatz war:
SELECT id, COUNT(id) FROM anwender GROUP BY id;
Jedoch gibt das keine einzelne Zahl zurück wieviele Ergebnisse gefunden wurden, sondern eine Tabelle
+----+-----------+
| id | COUNT(id) |
+----+-----------+
| 5 | 1 |
| 6 | 1 |
| 7 | 1 |
+----+-----------+
Auch zusammen mit WHERE muss es gehen,
um zu wissen wieviele Ergebnisse gefunden wurden.
Ohne GROUP BY würde es wahrscheinlich gehen,
jedoch als Aggregate Function" darf es ohne GROUP BY gar nicht stehen.
Selbst wenn, wäre nicht klar wonach gruppiert wird.
Auch wenn ich denke keine Lösung zu finden,
sage ich trotzdem mal ein breites D_A_N_K_E falls doch wer eine Antwort kennt.
Tobias Kleeberger
Hi,
also zunächst mal: Ja, eigentlich COUNT nur bei GROUP BY, allerdings ist das bei den mir bekannten Systemen durchaus kein Problem ein COUNT ohne einzusetzen, sofern du keine einzelnen Spalten abfragst:
SELECT COUNT(*) -> Anzahl der Datensätze
SELECT COUNT(*), id ... GROUP BY id -> gruppiere nach ID und dann gib aus wieviele zu welcher ID gefunden wurden
Du wirst somit aber tatsächlich ein Problem haben in EINER Abfrage rauszufinden wieviele Sätze es gibt und welche das sind. Falls du SUBSELECTs verwenden kannst/willst, dann ginge einmal das SELECT spalten FROM a und ein SELECT COUNT(*) FROM a und das ganze per INNER JOIN über 1=1. Wäre Schwachsinn, aber ginge.
Ansonsten, wenn du nur die Anzahl der Ergebnisse haben willst, dann lassen sich da auch Statuscodes der Datenbank bzw. der Skriptsprachen verwenden.
MfG
Rouven
echo $begrueszung;
Ansonsten, wenn du nur die Anzahl der Ergebnisse haben willst, dann lassen sich da auch Statuscodes der Datenbank bzw. der Skriptsprachen verwenden.
Wenn man _nur_ die Anzahl der betroffenen Datensätze haben will, mag dieses Ergebnis durchaus mit mysql_num_rows() ermittelbar sein. Jedoch klappt dies bei odbc_num_rows() nicht mehr richtig.
Es mag zwar mit etwas weniger eigenen Programmieraufwand verbunden sein
xxx_query('SELECT ... FROM ...');
echo xxx_num_rows();
statt
xxx_query('SELECT COUNT(*) AS anzahl FROM ...');
$row = xxx_fetch_row();
echo $row['anzahl'];
zu tippen. Jedoch hat man dann nicht berücksichtigt, dass die Datenbank bei der ersten Methode unnötigerweise ein Result-Set zusammenstellt und dafür Ressourcen verbraucht.
echo "$verabschiedung $name";
Hallo,
Wie kann ich bitte herausfinden wieviele Ergebnisse eine Abfrage lieferte?
Zum einen möchte ich herausfinden, wieviele Einträge überhaupt in der Tabelle sind,
und zum anderen möchte ich herausfinden wieviele Eintrage auf ... WHERE city LIKE 'M%' geliefert werden.Ich denke zwar an COUNT(), (keine AHnung ob COUNT(*) oder COUNT(id), mir ist der Unterschied nicht bewusst)
Count(*) zählt alle betroffenen Datensätze. Count(id) zählt die betroffenen Datensätze, die eine id != NULL haben.
aber meines Erachtens darf man COUNT() so nicht anwenden,
weil COUNT() als "Aggregate Function" nur in Verbindung mit GROUP BY Verwendung finden darf.
Nein, andreasrum ;-))
Bei der Verwendung von GROUP BY dürfen als Felder im Resultset nur die gruppierten Felder oder Aggregatfunktionen stehen. Bsp.:
SELECT name, vorname FROM tabelle GROUP BY name
ist problematisch, weil nicht bestimmt ist, welcher Vorname z.B. bei mehrfachem Auftreten eines Namens im Resultset steht. Bei
Maier, Ines
Maier, Klaus
Maier, Michael
wird ja, nach Name gruppiert, dann im Resultset Maier nur einmal stehen. Welcher Vorname ist dann aber richtig?
SELECT name, SUM(betrag) FROM tabelle GROUP BY name
ist unproblematisch, weil z.B. für alle Maier die Summe der Beträge gebildet werden kann.
SELECT COUNT(*) FROM tabelle
und
SELECT COUNT(*) FROM tabelle WHERE city LIKE 'M%'
ist aber durchaus korrekt.
viele Grüße
Axel