Count(*) in SQL Abfrage
Taney
- datenbank
Hallo Forum, was mache ich hier eigentlich falsch?
Folgende Tabelle: EVENTS
Tabelle: events
id userid friendid eventid datum uhrzeit re
1 859 1137 2 2007-09-11 15:23:40 0
2 859 960 3 2007-09-10 10:23:40 0
3 859 961 3 2007-09-10 11:23:40 0
Und meine Query dazu:
select count(*) AS Treffer, id, eventid, friendid, datum, uhrzeit from EVENTS where userid=859 group by id, eventid, friendid, datum, uhrzeit;
Beim Ergebnis sollte in der Spalte "Treffer" 3 erscheinen und nicht 1.
Grüße
Hello,
select count(*) AS Treffer, id, eventid, friendid, datum, uhrzeit from EVENTS where userid=859 group by id, eventid, friendid, datum, uhrzeit;
Beim Ergebnis sollte in der Spalte "Treffer" 3 erscheinen und nicht 1.
nö, sollte es nicht. Du sagst "hol dir mal alle Datensätze, dann fasse zusammen sofern id, eventid, friendid, datum und uhrzeit gleich sind und sage mir dann für jede dieser Zusammenfassungen wie viele Elemente da drin sind". Dein Ergebnis wird also 3 Zeilen haben, wobei Treffer jeweils 1 ist.
MfG
Rouven
Danke rouven,
wie mache ich das dann, so dass bei Treffer 3 rauskommt. Ist das überhaupt möglich, das in die Query reinzupacken?
Grüße
Hello,
wie mache ich das dann, so dass bei Treffer 3 rauskommt. Ist das überhaupt möglich, das in die Query reinzupacken?
tja, das kommt darauf an, was du eigentlich wissen willst. Wenn es dir nur um die Gesamttreffer der User-ID geht, dann gruppiere halt danach:
SELECT userid, COUNT(*)
FROM events
WHERE userid = 859
GROUP BY userid
MfG
Rouven
Hi Rouven, vielen Dank für dne Tipp.
Wenn ich nach 'userid' gruppiere, passt zwar die Spalte Treffer (3), ich erhalte aber nur noch eine Zeile als Ergebnis, anstatt alle drei. In der Spalte count(*) sollte dann halt für jede Zeile 3 drin stehen. Ist wahrscheinlich zuviel von mir verlangt ne? :-)
Grüße
Hello,
Ist wahrscheinlich zuviel von mir verlangt ne? :-)
Pauschal? Ja.
Individual? Vielleicht liesse sich, je nach DBMS, Lust, Zeit und Laune etwas basteln, was zuerst die von mir vorgeschlagene Abfrage vornimmt und anschließend einen JOIN mit der Originaltabelle vornimmt. Das setzt allerdings voraus, dass das DBMS so einfach ein GROUP BY und ein WHERE in einem Subselect durchgehen lässt, ich glaube z.B. MySQL stellt sich da auf die Hinterbeine...
MfG
Rouven
Hi,
wir haben MySQL 5 am Laufen, müsste eigentlich klappen. Sub-Select. Damit hatte ich mal zu tun, mal schauen, ob ich das nochmal so auf die Reihe kriege.
Grüße
Hello,
wir haben MySQL 5 am Laufen, müsste eigentlich klappen. Sub-Select. Damit hatte ich mal zu tun, mal schauen, ob ich das nochmal so auf die Reihe kriege.
na ja, das schema wäre
SELECT a.spalte1, a.spalte2, ..., b.anzahl
FROM (
(SELECT COUNT(*) AS anzahl, userid FROM ... GROUP BY userid) b
INNER JOIN
(SELECT ... FROM ...) a
ON a.userid = b.userid
)
MfG
Rouven
Hi,
wie mache ich das dann, so dass bei Treffer 3 rauskommt. Ist das überhaupt möglich, das in die Query reinzupacken?
Was soll denn "Treffer" allgemein beziffern? Die Anzahl gefundener Datensätze (der gesamten Abfrage)?
Dann wärst Du mit einem simplen mysql_num_rows() besser beraten.
LG