webForumDet fria alternativet
Logga in / Bli medlem

Gruppera data efter dag/vecka/månad

Databaser & SQL

1 svar · 575 visningar · startad av klockren

Medlem sedan sep. 200151 inlägg
Trådstart#1

Jag har en tabell i en mySQL-databas som innehåller poäng som användarna registrerar (från stegräknare/motion). Den är i grova drag strukturerad som

username (varchar) - aktivitet (varchar) - datum (date, ex 2005-080-7) - poäng (int)

Nu vill jag visa grafisk statistik över registrerade poäng (med hjälp av jpGraph).

Användaren ska kunna välja mellan att vista statistik för senaste veckan (grupperat per dygn), senaste 3 månaderna (grupperat per 7-dagarsperiod) samt senaste året (grupperat per månad).

Min SQL-fråga och PHP-koden som läser in data i arrayer ser hittills ut som följande:

$statsql = mysql_query("SELECT datum, SUM(poang) FROM aktiviteter WHERE username = '$username' GROUP BY datum");

while($statrow = mysql_fetch_array($statsql)) {
	$xaxel[] = $statrow[0];
	$yaxel[] = $statrow[1];
}

(SUM använder jag då man kan registrera flera aktiviteter på en dag)

Problem1:
Vissa dagar/veckor/månader finns det inte några poäng registrerade för. Då kommer det inte att bli någon "stapel" (arraypost) för den dagen/veckan/månaden. Jag vill att det ska skapas nollposter för dessa dagar! För en vecka kan jag ju göra 7 SQL-frågor, en för varje dag, men det känns lite fult...

Problem2:
Har inte luskat ut hur jag från ett "date"-fält får ut data grupperad efter månad eller år (i en så enkel sql-fråga som möjligt).

Tack på förhand!

Medlem sedan dec. 200012 464 inlägg
#2

Det går att lösa med en hjälptabell som har en integer-kolumn där du lagrar värdena 0 till 365.

Med denna tabell och lämplig funktion (date_add) kan du konstruera alla datum du behöver och sedan göra en left join mot aktivitetstabellen. Du måste då ta hand om de poäng som är null med hjälp av

SUM(coalesce(poang,0))
  1. Du kan använda funktionerna month och week i din group by.
266 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)