Beste leden,

Ik heb een tabel waar ik log op welk IP iemand ingelogt heeft. Nu wil ik uit de database halen op welke IP de meeste leden ingelogt hebben.

Nu heb ik het volgende geprobeerd:

<?php
SELECT
COUNT(memberid) AS aantal, ip
FROM
ledenip
GROUP BY
memberid
ORDER BY
aantal
DESC LIMIT 10
?>

Dit geeft niet het gewenste resultaat. Iemand tips hoe ik op kan halen hoeveel verschillende leden er op een bepaald IP ingelogd heeft?

Erwin
De query is dan ook fout (wiskundig onmogelijk) en hoort een dikke error op te leveren. Maar ja, MySQL verzint wel wat onzin, steekt een dikke middelvinger op en wenst je veel succes met debuggen ;)

Je vraag in het SELECT-gedeelte het ip op, naast het gebruik van de aggregate functie COUNT(). Hier MOET!!!! je dus de kolom ip ook in de GROUP BY noemen. Doe je dat niet, is de query hartstikke fout.

Tip: Ga eerst de database fatsoenlijk configureren zodat foute queries direct richting eeuwige jachtvelden worden geschoten. PHPFreakz legt dit goed uit in de wiki.


SELECT
  COUNT(*) AS aantal, 
  ip
FROM
  ledenip
GROUP BY 
  ip
ORDER BY
  aantal DESC 
LIMIT 10
Nu pakt die dus alle leden uit de database welke erop ingelogt hebben incl de dubbele records met memberid en ip samen.

Dus er staat het volgende in de DB

memberid ip
19 xx.xx.xx.xx
19 xx.xx.xx.xx
19 xx.xx.xx.xx
14 xx.xx.xx.xx

dan zou het resultaat moeten zijn:
2x xx.xx.xx.xx

en niet
4x xx.xx.xx.xx

Ik zal dat artikel eens doornemen.
memberid wordt in de query die ik je gaf niet opgevraagd, zul je dus ook nooit retour krijgen. Je krijgt daar per ip-adres het aantal door en dat is het.

Of zoek je dit:

SELECT
  COUNT(*) AS aantal, 
  memberid,
  ip
FROM
  ledenip
GROUP BY 
  memberid,
  ip
ORDER BY
  aantal DESC 
LIMIT 10

Dan krijg je per memberid, per ip-adres het aantal records door.

Reageren