[PHP/MYSQL] Records van zelfde datum tellen

Pagina: 1
Acties:
  • 103 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi. Ik ben met een webstatsscript bezig en ik wil het aantal pageviews per dag over de laatste 30 dagen uit mijn database plukken.

Met behulp van de manual ben ik zover gekomen dat ik alle records van de laatste 30 dagen op kan vragen. Dit doe ik met WHERE TO_DAYS(NOW())-TO_DAYS(datum) <=30. De datum kolom is van type 'date'.
Nu moet ik het resultaat nog bewerken zodat ik records (=pageviews) per dag krijg.

Mijn vraag: is het mogelijk om met een mysql query in één keer

- alle records van de laatste 30 dagen te pakken
- én records van dezelfde datum tellen
- én het aantal per datum in een array uit te poepen

of is dit een beetje teveel gevraagd van Mysql? Ik heb zo'n vermoeden, daarom moet ik misschien met PHP op datum gaan selecteren en tellen.
In dat geval, hoe kan ik dat dan het beste aanpakken?

Date_sub (mysql) schijnt ook goed te werken en zelfs efficiënter te zijn, maar ik heb nog geen goed werkende query kunnen bouwen met date_sub, ondanks aardige voorbeelden in de manual.

[ Voor 13% gewijzigd door Verwijderd op 06-03-2003 00:23 ]


Acties:
  • 0 Henk 'm!

  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 11:54

Bud_s

Team Anticimex & Lock

Geen ervaring met PHP, maar dit klint als een kruistabel (crosstab) google daar maar eens op.
Suc6

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

crosstab? Bestaat die in MySQL?

Maar goed... Aangezien * gorgi_19 een klein beetje brak is, een kleine disclaimer.. :+

Je wilt iets van een
SQL:
1
Select Count(*) as aantal, datum FROM tabelnaam Where JeWhereClausule Group By datum

Syntax zal niet helemaal kloppen, maar het moet wel een idee geven..

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 11:54

Bud_s

Team Anticimex & Lock

misschien hier iets aan :

Google : crosstab mysql group:*mysql*

[ Voor 41% gewijzigd door Bud_s op 06-03-2003 00:47 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat is ongeveer wat ik zoek inderdaad! Nu ik het bekijk zie ik dat ik meeste dingen uit de query wel in tutes heb zien staan. Eens kijken of ik het voor elkaar krijg hiermee. Dat crosstab doet ook wat ik wil maar is iets ingewikkelder volgens mij. Ik ga eerst Gorgi's voorbeeld proberen.

Nog een vraag: ik heb ergens - ik weet absoluut niet meer waar - gelezen dat date_sub een efficientere manier is om een datum range te selecteren dan de methode die ik nu gebruik. Weten jullie of dat klopt? Ik kan in de manual niets over performance van datum functies vinden.

[ Voor 10% gewijzigd door Verwijderd op 06-03-2003 01:49 ]


Acties:
  • 0 Henk 'm!

Verwijderd

in php missschien met mysql_num_rows($query);

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 06 March 2003 @ 19:30:
in php missschien met mysql_num_rows($query);
Zou evt kunnen, maar lijkt me niet efficienter dan MySQL de boel op te laten knappen.. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
ik heb zelf ook ooit zoiets gemaakt, redelijk zware query, maar werkt volgens mij redelijk foolproof:

code:
1
2
3
4
5
SELECT time, DAYOFMONTH(time) as day, COUNT( * ) 
            as count
        FROM pageviews
        WHERE DATE_FORMAT(time, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m')
        GROUP BY DAYOFYEAR( time ) ORDER BY time ASC

het probleem hiermee is alleen dat het van 'deze maand' is en niet van de afgelopen 30 dagen...maar misschien dat dit je iets op weg helpt....vooral die GROUP BY DAYOFYEAR heb je wat aan denk ik.....;)

[ Voor 5% gewijzigd door chris op 06-03-2003 20:18 . Reden: toch iets veranderd ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
*** foutje

[ Voor 92% gewijzigd door Verwijderd op 08-03-2003 16:22 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Update: bedankt voor de tips. Het werkt inmiddels met de volgende query:
PHP:
1
2
SELECT Count(*) as aantal, datum FROM pageviews WHERE TO_DAYS(NOW())-TO_DAYS(datum) <=20 
Group By datum order by id desc


:)

[ Voor 3% gewijzigd door Verwijderd op 08-03-2003 16:22 ]

Pagina: 1