Count / Group By probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rembem

Rembem

09/03/2008 19:18:00
Quote Anchor link
Hallo allemaal.
Ik ben bezig met een bezoekersteller te maken. Vooral om met sommige dingen meer ervaring op te doen. Alleen ik loop nu tegen een probleem aan.
Elke keer als iemand op een pagina komt word hij in de database gezet en die ziet er zo uit:
id | datum(date) | ip | Host | Useragent
Nu wil ik dus het aantal bezoekers + pagevieuws laten weergeven. (het gaat nu dus alleen om de velden datum en ip)
ik heb twee records in de database zitten
2008-03-09 | 0.0.0.0
2008-03-09 | 0.0.0.0

Nu heb ik deze query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
"SELECT DATE_FORMAT(datum,'%d-%m-%Y') AS nl_datum, COUNT(ip) AS aantalip, COUNT(datum) AS aantal FROM bezoeker GROUP BY datum, ip"

alleen ipv dat er dus 1 bezoeker uit komt en 2 pagevieuws komen ze allebei op 2 uit.

Kan iemand mij veder op weg helpen? moet ik dan met een subquery werken of wat doe ik fout want heb veder namelijk nog nooit gebruik gemaakt van Count en Group By.

Alvast bedankt!

Remco
 
PHP hulp

PHP hulp

26/12/2024 15:04:54
 
Joren de Wit

Joren de Wit

09/03/2008 19:25:00
Quote Anchor link
Je wilt twee verschillende dingen bepalen, het aantal bezoekers en het aantal pageviews. Je zult dus ook twee verschillende queries nodig hebben...

Pageviews per dag:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
    DATE_FORMAT(datum, '%d-%m-%Y') AS nl_datum,
    COUNT(ip) AS pageviews
FROM
    tabel
GROUP BY
    datum

Bezoekers per dag (lees: aantal unieke ip's):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
    DATE_FORMAT(datum, '%d-%m-%Y') AS nl_datum,
    COUNT(DISTINCT(ip)) AS pageviews
FROM
    tabel
GROUP BY
    datum
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Rembem

Rembem

09/03/2008 19:37:00
Quote Anchor link
Oke maar het is dus niet mogenlijk om het te doen in query?
 
Joren de Wit

Joren de Wit

09/03/2008 19:39:00
Quote Anchor link
Niet als je twee verschillende dingen vraagt. Het aantal bezoekers (unieke ip adressen) kun je in dit geval natuurlijk niet tegelijk ophalen met het totaal aantal pageviews per dag.

ps. Het is altijd een beetje spelen met GROUP BY en de resultaten die je krijgt, maar je moet er wel mee oppassen. Bij een query die eigenlijk niet mogelijk is, verzint MySQL gewoon zelf resultaten om terug te geven. Dus soms kun je beter meerdere queries gebruiken dan 1 query waarvan je niet zeker weet of de resultaten wel betrouwbaar zijn...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Rembem

Rembem

09/03/2008 19:43:00
Quote Anchor link
Oke dat laatste wist ik niet dat als het niet mogenlijk is dat hij dan zelf resultaten verzint om terug te geven.

Bedankt voor de hulp en de tip!
 
Joren de Wit

Joren de Wit

09/03/2008 19:46:00
Quote Anchor link
GROUP BY: Het juiste gebruik ervan

Meer informatie over het juiste gebruik van GROUP BY vindt je in bovenstaande tutorial. Daar leg ik ook uit welke queries met GROUP BY eigenlijk niet kunnen en waar MySQL resultaten gaat verzinnen...
 
Rembem

Rembem

09/03/2008 20:11:00
Quote Anchor link
Nogmaals bedankt!
Ik het net een beetje die tutorial door gelezen en toen bedacht ik me dat het wel in 1 query kan en ook gewoon betrouwbaar is en dat is zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
SELECT
    DATE_FORMAT(datum, '%d-%m-%Y') AS nl_datum,
    COUNT(DISTINCT(ip)) AS bezoekers,
    COUNT(ip) as pagevieuws
FROM
    bezoeker
GROUP BY
    datum

Want op deze manier groeppeer je hem op datum. Je telt met COUNT(ip) alle records van die datum en met COUNT(DISTINCT(ip)) tel je elk ip adres 1x binnen de group by van die datum.
op die manier is hij toch nog steeds betrouwbaar en zit hij gewoon in 1 query of zie ik nu wat over het hoofd?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.