[PHP/MySQL] aantallen/dag totaliseren en ontbrekende dagen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • wheel
  • Registratie: December 2001
  • Laatst online: 15:48
Hi!

Loop tegen beperkingen van mijn kennis aan en ben benieuwd of iemand mij op weg kan helpen. Heb een tabel met gegevens. Hierin staan datum en tijd (in 1 veld, datetime). Stel: het gaat om berichten en ik wil het aantal berichten per dag tonen.

Voorbeeld:
2012-01-01 12:23:34
2012-01-01 18:12:56
2012-01-03 23:03:18
2012-01-12 16:49:46

Op basis van deze tabel wil ik een grafiek genereren waarin aantallen per dag te zien zijn: op de x-as de datums, op de y-as de aantallen. Hiervoor gebruik ik Google Charts API.

Twee vragen:

1) Hoe kan ik, liefst in MySQL, de records 'clusteren' (zodat er per dag een totaalaantal uit komt)? Ik heb zoiets als SELECT DISTINCT DATE_FORMAT(`date`, '%d-%m-%Y') AS `date2` FROM `table` WHERE `id` = 1.

2) Ik specificeer een datumbereik. Hoe zorg ik ervoor dat alle datums daartussen die niet in de tabel voorkomen, wel met 0 als aantal in de grafiek komen?

Kan iemand mij op weg helpen?

[ Voor 5% gewijzigd door wheel op 30-09-2012 13:14 ]


Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 06-07 19:35
http://www.tizag.com/mysqlTutorial/mysqlcount.php

Hier staat o.a uitgelegd hoe je COUNT kunt gebruiken.

Acties:
  • 0 Henk 'm!

  • wheel
  • Registratie: December 2001
  • Laatst online: 15:48
Dank! Dat is snel en bruikbaar. Zo heb ik count nog niet eerder gebruikt. Ga ik mee aan de slag. Ook een tipje voor het andere probleem? Lijkt me dat ik dat beter met PHP dan met MySQL kan oplossen.

[ Voor 8% gewijzigd door wheel op 30-09-2012 13:57 ]


Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 06-07 19:35
Je hebt in Mysql ook gewoon date functies. Dus je kan gewoon selecteren op SELECT * FROM berichten WHERE date(TODAY) als het ware.

Hier vind je de date functies van mysql met syntax en alles.

http://dev.mysql.com/doc/...e-and-time-functions.html

CURDATE() heb je nodig in dit geval volgens mij.

[ Voor 8% gewijzigd door RedHat op 30-09-2012 16:32 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

wieleman schreef op zondag 30 september 2012 @ 13:09:
2) Ik specificeer een datumbereik. Hoe zorg ik ervoor dat alle datums daartussen die niet in de tabel voorkomen, wel met 0 als aantal in de grafiek komen?
Normaliter kan een RDBMS geen data verzinnen die niet in de database zit danwel eruit af te leiden is. Je zal dan met trucjes moeten werken om toch wel een tabel zo te maken dat ie die gegevens heeft.
Je zou tenslotte met een join een tabel met datums en een tabel met gegevens per datum aan elkaar kunnen verbinden. En die tabel met datums hoeft niet per se een echte tabel te zijn, dat mag ook een sub query zijn die de datums genereert of een zonet gevulde temporary table.

Als echter het gebruik van group by al nieuw voor je is, denk ik dat je dit beter in je applicatielaag (php) kan oplossen. Je weet tenslotte bij het doorlopen van je query-resultaat wat je verwacht. En als er tussen twee opeenvolgende records meer dan 1 dag verschil zit, kan je vrij eenvoudig een extra record naar google's kaartomgeving sturen.