Toon posts:

[MYSQL] Problem met GROUP BY functie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik krijg iets niet voor elkaar met mijn group by functie.

Ik heb de volgende mysql tabellen :

tabel bezoekers_session : sessionid varchar(32) PK, webid int(20)
tabel session_pageview : sessionid varchar(32) PK,languageid int(20), pageid int(20), hittime timestamp(14)

Ik wil hetvolgende bereiken :

Een query om per sessionid de eerste hit op te halen, dit geeft me de volgende query (deze is correct):

PHP:
1
 SELECT sp.sessionid, pageid, MIN( hittime ) AS hittime FROM session_pageview sp, bezoekers_session bs  WHERE bs.sessionid = sp.sessionid AND bs.webid = '1' AND languageid = '1' AND sp.hittime >= '20041201000000' AND sp.hittime <= '20041220000000' GROUP BY sp.sessionid


Bij de volgende query om de laatste hit van iedere sessie te registreren loopt het echter mis (hij geeft de pageid van de min weer ipv die van de max)

PHP:
1
 SELECT sp.sessionid, pageid, MAX( hittime ) AS hittime FROM session_pageview sp, bezoekers_session bs  WHERE bs.sessionid = sp.sessionid AND bs.webid = '1' AND languageid = '1' AND sp.hittime >= '20041201000000' AND sp.hittime <= '20041220000000' GROUP BY sp.sessionid


Hoe kan ik dit verhelpen?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Hoe kun je nu regels hebben in je select die niet of een aggregate functie hebben of in de group by zijn opgenomen. Ik had dat al eens eerder gehoord van MySQL maar wat doet 'ie er dan mee?

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
P_de_B schreef op maandag 20 december 2004 @ 14:28:
Hoe kun je nu regels hebben in je select die niet of een aggregate functie hebben of in de group by zijn opgenomen. Ik had dat al eens eerder gehoord van MySQL maar wat doet 'ie er dan mee?
Ik begrijp je vraag niet helemaal maar ik zal je even uitleggen wat de query nu doet :

Hij haalt de rijen op die aan de where clausule voldoen stel dat dat de volgende zijn,

sessie page hittime
3456 1 20041201000000
3456 2 20041201000010
3456 3 20041201000020

Hij moet nu bij de eerste query (die met MIN) de eerst rij uit de resultaten halen want als hij groupt op sessie schiet er maar één rij over hiervan moet hij die rij nemen met als hittime de MINIMUM hittime dus dit is de eerste.
Dit doet ie correct hij geeft
3456 1 20041201000000

Bij de tweede query die met de MAX() erin moet ie ook groupen op sessie maar de rij eruit halen met de MAXIMUM hittime dit is de laatste, dit doet ie niet correct, hij geeft wel de juiste hittime weer maar neemt de page van de eerste rij, hij geeft
3456 1 20041201000020

Die 1 zou dus 3 moeten zijn, wat doe ik nu verkeerd in mijn query?

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.