[mysql] count, group by, etc

Pagina: 1
Acties:

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Ik kom er niet helemaal uit
Ik heb een tabel waar ik bezoekers in log. Iedere click veroorzaakt een row in m'n tabel. Iedere unieke bezoeker heeft z'n eigen user_id. Daarnaast log ik de jaren, maanden en dagen apart.

Wat ik nu graag wil is in 1 query een overzicht van het aantal unieke bezoekers per jaar, maand of dag
code:
1
SELECT COUNT(month) AS total, month FROM log GROUP BY month
gaat niet, want dan krijg ik het aantal hits per maand en dat is niet de bedoeling

Als ik daar een GROUP BY user_id aan toevoeg heeft het natuurlijk ook het gewenste resultaat niet, want dan krijg ik het aantal hits per user per maand te zien. Ik zou dan wel in php het aantal rows per maand bij elkaar op kunnen tellen, maar wil het liever gewoon met 1 querie doen als het kan.

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 17:04

Super_ik

haklust!

select count (user_id) from die_tabel group by jaar :?

ow hoe ziet die table er nou uit, wat wil je nou precies

[ Voor 41% gewijzigd door Super_ik op 17-12-2002 15:41 ]

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

desnoods:

SELECT COUNT(month) AS hits, COUNT(user_id) as uniek, month FROM log GROUP BY month

Hebbie zowel views als unieke bezoekers...

Bovendien ga je met je 3 velden zo een beetje de fout in... want nu krijg je van alle jaren de hits gegroepeerd per maand... je zult dus sowieso een GROUP BY month, year oid moeten doen..

[ Voor 41% gewijzigd door Bosmonster op 17-12-2002 15:45 ]


Verwijderd

als ik het goed begrijp wil je het aantal unieke gebruikers zien dat per maand, dag, jaar inlogd?
probeer het eens met

SELECT COUNT(user_id) AS total, month From log
#je wil het aantal user id's tellen,
WHERE month=DEC(of was het 12)
#van een bepaalde maand
GROUP BY user_id
#en alleen de unieke waardes

[note]
not an sql guru
[/note]

  • pling
  • Registratie: Maart 2001
  • Laatst online: 18:58

pling

Lekker Kepjoeteren

Je ontkomt er denk ik niet aan een subset aan te maken met unieke gebruikers en daar je querie op af te vuren. Maar dit werkt zeker niet in mysql (?):

SELECT COUNT(month), month FROM (SELECT DISTINCT user, month
FROM log) GROUP BY MONTH;

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

mensen die beginnen over count(month) moeten misschien hun SQL-boeken/sites er nog eens op nakijken.
De eerste reactie komt nog het dichts bij het antwoord.

Je hebt een COUNT(DISTINCT userid) nodig. Kijk verder maar eens op:
http://www.mysql.com/doc/en/Group_by_functions.html
(en dus ook een hint voor de count(month) mensen. Je wilt toch geen maanden tellen of wel soms)

Kan zijn dat het een beetje bot overkomt deze post, maar ik ben gewoon verbaasd.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Je hebt gelijk.. what was i thinking (te dom overgenomen..)

Bedoelde eigenlijk Count(ID), dus gewoon records.. en dus pageviews. En Count(DISTINCT user_id) voor unieke gebruikers.

[ Voor 55% gewijzigd door Bosmonster op 17-12-2002 16:56 ]


  • pling
  • Registratie: Maart 2001
  • Laatst online: 18:58

pling

Lekker Kepjoeteren

De eerste reactie komt nog het dichts bij het antwoord.
Geeft mijn reactie niet hetzelfde resultaat (Dan vind ik toch dat ik het dichts bij zit >:)) ?

Ik ben nog benieuwd of MySQL deze sql constructie aankan...

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

pling schreef op 17 december 2002 @ 17:39:
[...]


Geeft mijn reactie niet hetzelfde resultaat (Dan vind ik toch dat ik het dichts bij zit >:)) ?

Ik ben nog benieuwd of MySQL deze sql constructie aankan...
Zie mijn eerdere post en bekijk mysql link

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 17:04

Super_ik

haklust!

Goodielover schreef op 17 December 2002 @ 16:51:
De eerste reactie komt nog het dichts bij het antwoord.
dank u :P

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

code:
1
2
3
SELECT Month, COUNT(DISTINCT(User_ID)) AS Total
FROM Log
GROUP BY Month

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Jammer robjanssen, zullen we maar group by Jaar, Month doen.
We waren er eigenlijk al uit hoor.

[ Voor 24% gewijzigd door Goodielover op 18-12-2002 21:05 ]


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Het eerste antwoord komt slechts het dichts in de buurt van het voorbeeld wat ik gaf van wat niet werkt. Kijk nog maar eens goed naar die query in m'n eerste post, het enige verschil met jouw oplossing is dat je iets anders tussen de () van de COUNT zet. Maar dat maakt natuurlijk niets uit, het resultaat is hetzelfde.

ik zal het nog een keer uitleggen:
iedere bezoeker die op m'n site komt krijgt bij 'binnenkomst' een user_id toegewezen (wat vervolgens in een sessie wordt opgeslagen) (dat user_id is overigens gelijk aan de hoeveelste bezoeker die persoon is).
Verder wordt iedere klik, dus iedere pagina die die bezoeker binnen mijn site bekijkt, opgeslagen in de database. Dus als een bezoeker 10 pagina's bekijkt, dan zijn er op zijn user_id 10 rows terug te vinden in m'n database.
Stel nu dat ik in:
november 2 bezoekers heb:
- bezoeker 1 heeft 2 pagina's bekeken,
- bezoeker 2 heeft 3 paginas bekeken en
december 3 bezoekers heb:
- bezoeker 3 heeft 4 pagina's bekeken,
- bezoeker 4 heeft 6 paginas bekeken en
- bezoeker 5 heeft 10 pagina's bekeken.
Als ik dan die count doe zoals gesuggereerd wordt dan krijg ik over de maand:
* november 5 als uitkomst, en ik wil 2 als uitkomst hebben
* december 20 als uitkomst, en ik wil 3 als uitkomst hebben.

duidelijker dan dit lukt echt niet hoor :-)

en de bedoeling is dus dit met 1 query te doen. Met meerdere queries en PHP als intermediair red ik ook wel, maar als het niet hoeft doe ik dat natuurlijk liever niet

en ipv maand wil ik dus ook dag of jaar kunnen doen, maar dat mag met aparte queries

[ Voor 5% gewijzigd door marty op 19-12-2002 13:49 ]


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Lees dan wel goed de antwoorden die je krijgt Marty, want dan ga ik mezelf maar eens quoten:
Goodielover schreef op 17 December 2002 @ 16:51:
mensen die beginnen over count(month) moeten misschien hun SQL-boeken/sites er nog eens op nakijken.
De eerste reactie komt nog het dichts bij het antwoord.

Je hebt een COUNT(DISTINCT userid) nodig. Kijk verder maar eens op:
http://www.mysql.com/doc/en/Group_by_functions.html
(en dus ook een hint voor de count(month) mensen. Je wilt toch geen maanden tellen of wel soms)

Kan zijn dat het een beetje bot overkomt deze post, maar ik ben gewoon verbaasd.
Ik geef je hier toch echt het antwoord.

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
:X :X :X :X :X |:(
Pagina: 1