[MySQL] Groupen binnen een tijdinterval

Pagina: 1
Acties:

  • BKJ
  • Registratie: April 2000
  • Laatst online: 27-10 15:19
Met behulp van MySQL hou ik bij hoeveel outclicks ik heb op een site. Ik heb de volgende kolommen in een tabel:

ip - timestamp (unix)

Nu moet ik tellen hoeveel records er in deze tabel zitten met de voorwaarde dat een ip dat heeft geklikt binnen 24 uur maar 1 keer wordt geteld.

Nu kan ik prima groupen op een dag maar dat gaat niet werken aangezien dan een ip meerdere keren wordt geteld. Ook kan een ip bijvoorbeeld op 23.55 en 0.01 hebben geklikt waardoor deze twee keer kan worden geteld terwijl deze maar 1 keer geteld moet worden.

Wat is nu een slimme query?

Kamer huren


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 24-11 16:50
Mmm, op zich kun je natuurlijk gewoon op twee items groupen, eerst de dag, dan het IP. (of andersom) maar wat jij wilt met 23.55 en 0.01 zal erg lastig worden, ergens zul je die grens moeten trekken. want wat als ik vandaag om 12.03 en morgen om 12.04 een hit heb? Mag dat dan wel al twee keer geteld worden? Of is er een mogelijkheid in je table om het verschil tussen een out en een 'in'-click te 'zien'?

  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 30-04 10:28
Dat wordt denk ik vrij lastig implementeren in een query (wellicht wel mogelijk in een stored procedure). Had je er niet meer aan gehad als je een tabel had met het aantal hits per IP-adres, dus dat je per IP-adres maar één record bijhoudt zolang deze hits binnen de 24u vallen? :)

  • BKJ
  • Registratie: April 2000
  • Laatst online: 27-10 15:19
beetle71 schreef op donderdag 15 maart 2007 @ 08:33:
Mmm, op zich kun je natuurlijk gewoon op twee items groupen, eerst de dag, dan het IP. (of andersom) maar wat jij wilt met 23.55 en 0.01 zal erg lastig worden, ergens zul je die grens moeten trekken. want wat als ik vandaag om 12.03 en morgen om 12.04 een hit heb? Mag dat dan wel al twee keer geteld worden? Of is er een mogelijkheid in je table om het verschil tussen een out en een 'in'-click te 'zien'?
Nee, de tabel is alleen ip en timestamp. Ik kan natuurlijk altijd een loop bouwen die elk ip gaat bekijken of deze voorkomt binnen 24 uur. Maar ook dat levert problemen op... Maar idd mag je twee keer geteld worden als je om 12.03 vandaag en 12.04 morgen klikt.
JeRa schreef op donderdag 15 maart 2007 @ 08:36:
Dat wordt denk ik vrij lastig implementeren in een query (wellicht wel mogelijk in een stored procedure). Had je er niet meer aan gehad als je een tabel had met het aantal hits per IP-adres, dus dat je per IP-adres maar één record bijhoudt zolang deze hits binnen de 24u vallen? :)
Tja, dat was makkelijker geweest, helaas staat de structuur nu al zo en moet ik nu roeien met de riemen die ik heb ;)

[ Voor 3% gewijzigd door BKJ op 15-03-2007 08:47 ]

Kamer huren


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 24-11 16:50
Dan denk ik dat je het in twee keer moet doen, eerst alles ophalen voor 1 dag 0:00:00- 23:59:59
gegroupeerd per ip, met zowel de min() als max() waarde van de timestamp.

Vervolgens alles voor de dag+1, en dan checken of de min() waarde van deze groter is dan de max() waarde van de dag+24u. If NOT so, dan verwijderen uit de de resultaten van de dag, want de outclick vond pas plaats op de dag+1.

Ik vraag me echter wel het volgende af; als het gaat om een site dan kan ik me voorstel dan je meer dan 1* per dag een outclick hebt!. Bijv. je bekijkt tweakers.net als je op je werk komt, en dan pas weer vlak voor je naar huis gaat. Volgens mij zou dat 2 outclicks moeten opleveren.

  • BKJ
  • Registratie: April 2000
  • Laatst online: 27-10 15:19
beetle71 schreef op donderdag 15 maart 2007 @ 08:59:
Dan denk ik dat je het in twee keer moet doen, eerst alles ophalen voor 1 dag 0:00:00- 23:59:59
gegroupeerd per ip, met zowel de min() als max() waarde van de timestamp.

Vervolgens alles voor de dag+1, en dan checken of de min() waarde van deze groter is dan de max() waarde van de dag+24u. If NOT so, dan verwijderen uit de de resultaten van de dag, want de outclick vond pas plaats op de dag+1.

Ik vraag me echter wel het volgende af; als het gaat om een site dan kan ik me voorstel dan je meer dan 1* per dag een outclick hebt!. Bijv. je bekijkt tweakers.net als je op je werk komt, en dan pas weer vlak voor je naar huis gaat. Volgens mij zou dat 2 outclicks moeten opleveren.
Het blijft zoals jij beschrijft een nogal ranzige oplossing. Had de hoop dat MySQL dat mss in 1 keer kon doen.

Voor wat betreft je opmerking over outclicks: het is een afspraak met een adverteerder en die hanteert een vaste prijs per ip per 24 uur.

Kamer huren


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
je hebt volgens mij sowieso wel een probleem... want hoe los je dit geval op:
code:
1
2
3
4
ip           timestamp
1.1.1.1   12-03-2007 23:59
1.1.1.1   13-03-2007 13:00
1.1.1.1   14-03-2007 00:02


de eerste en de derde mogen niet gegroepeerd worden, maar hoort de eerste nu bij de tweede of hoort de derde bij de tweede?

  • Goegol
  • Registratie: November 2005
  • Laatst online: 10:51
Gebruik een cronjob!
Laat deze elk uur ofzo een scripje uitvoeren dat kijkt of het binnen de 24 uur valt of er buiten

Dan kan je of de data verplaatsen naar een andere tabel of je kan een veld aanmaken waar je de waarde van veranderd.
Volgens mij ben je dan een heel eind.

Hemelaar Fotografie

Pagina: 1