Crew algemeen |
|
Ik heb er even over nagedacht, maar het lijkt toch lastiger dan ik dacht.
Als je voor elke dag bijvoorbeeld de rating wilt weten, wat moet je dan doen als je op een dag helemaal geen ratings hebt? Je krijgt dan allemaal gaten ben ik bang, zeker als je met kortere periodes gaat werken.
Via php kun je die wel opvullen, natuurlijk.
En dan heb je nog het probleem dat je alle ratings met sql moet onderverdelen in groepjes binnen dezelfde periode. Binnen een bepaalde periode is het makkelijk om alle gegevens op te halen, maar ik heb geen idee hoe je dat voor alle ratings moet doen.
Dan misschien toch maar alle ratings ophalen en verder in php afwerken...
Edit:
MySQL.com: group by zou het werk moeten doen! Volgens mij werkt dit:
SELECT YEAR(date) year, MONTH(date) month, AVG(rating) rating FROM ratings GROUP BY year, month HAVING year = 2000;
SELECT YEAR (date) year , MONTH (date) month , AVG (rating ) rating FROM ratings GROUP BY year , month HAVING year = 2000;
om de rating per maand in het jaar 2000 op te halen.
Ik heb getest met deze tabel:
-- Table "ratings" DDL
CREATE TABLE `ratings` (
`rating` tinyint(4) default NULL,
`date` date default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- Table "ratings" DDL CREATE TABLE `ratings` ( `rating` tinyint(4) default NULL, ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
die ik willekeurig heb gevuld met zo'n 10k ratings.
Dat geeft:
Citaat: mysql> SELECT YEAR(date) year, MONTH(date) month, AVG(rating) rating FROM ratings GROUP BY year, month HAVING year = 2000;
+--+--+--+
| year | month | rating |
+--+--+--+
| 2000 | 1 | 3.1250 |
| 2000 | 2 | 3.0000 |
| 2000 | 3 | 3.1000 |
| 2000 | 4 | 3.0000 |
| 2000 | 5 | 3.0000 |
| 2000 | 6 | 3.1250 |
| 2000 | 7 | 3.2000 |
| 2000 | 8 | 3.0000 |
| 2000 | 9 | 2.6667 |
| 2000 | 10 | 2.7000 |
| 2000 | 11 | 2.8750 |
| 2000 | 12 | 3.1250 |
+--+--+--+
12 rows in set Omdat het zoveel rijen zijn zitten er nu geen gaten in, maar met php zou je alsnog moeten kijken of die er wel zijn. |