Ilja: MySQL: Verschachtelung von MAX und COUNT

Beitrag lesen

yo,

select c1.date, c1.IP, c2.date as c2date, c2.IP as c2IP, (COUNT(*) + 1) as Anzahl
FROM useronline c1
CROSS JOIN useronline c2
WHERE c1.date < DATE_ADD(c2.date, INTERVAL 1 minute) AND c1.date > DATE_SUB(c2.date,
INTERVAL 1 minute) AND c1.IP != c2.IP
GROUP BY c1.date
ORDER BY Anzahl DESC, c1.date DESC

zum einen solltest du alle spalten (ausgenommen aggregat-funktionen), die du ausgeben willst, auch in die group by klausel mit reinnehmen. normalerweise geben alle rdbms sonst eine fehlermeldung aus, nur mysql probiert da einen anderen weg zu gehen, von dem ich aber abraten würde.

zum anderen gruppierst du über die date spalte und dabei werden alle datensätze in die gleiche gruppe reingenommen, die auch den gleichen wert für date besitzen, was sich auf die aggregat-funktion auswirken wird. was du aber willst, ist sicherlich eine gewissen zeitspanne geben, damit sie als gleichzeitig online gelten.

auch ist mir der cross join mit seiner where klausel auf den ersten blick unheimlich. c1 soll kleiner sein als ein bestimmter wert + Intervall und dann wieder größer. und beides wird mit einem logischen AND verbunden. das ist mir noch nicht ganz klar.

Ilja