login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Rating per periode (Opgelost)

Offline henver - 07/01/2009 19:42
Avatar van henverHTML gevorderde Hallo Sitemasters,

Ik heb een vraagje i.v.m. PHP/SQL.
Ik heb een database waarin links staan. Bezoekers kunnen deze links dan een rating geven die uiteraard wordt opgeslagen in de database.
Nu is mijn vraag hoe ik deze ratings per dag / week / maand / altijd kan uitlezen.

Hoe moet ik hiervoor mijn databasestructuur opbouwen en hoe moet de informatie uitgelezen worden?

Hendrik

4 antwoorden

Gesponsorde links
Offline Rik - 07/01/2009 20:43
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Het enige dat je hoeft te doen is in de tabel een datetime veld erbij te maken.

Dan kun je met behulp van de mysql date functies in een where per gewenste tijdseenheid de rating opvragen.

Laat even weten of het lukt, anders maak ik een voorbeeldje.  
Offline henver - 08/01/2009 16:50
Avatar van henver HTML gevorderde Kom er niet uit, ken ook niet veel van de mysql datum en tijd functies.
Een voorbeeld is inderdaad handig.

PS: Als ik het goed begrijp, moet ik voor de rating een aparte database aanmaken met 3 kolommen: link_id, rating, datum?
Offline Rik - 08/01/2009 22:07 (laatste wijziging 09/01/2009 14:28)
Avatar van Rik Gouden medailleGouden medaille

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:
  1. 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:
  1. -- Table "ratings" DDL
  2.  
  3. CREATE TABLE `ratings` (
  4. `rating` tinyint(4) default NULL,
  5. `date` date default NULL
  6. ) 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.
Offline henver - 09/01/2009 16:36
Avatar van henver HTML gevorderde Dank je wel!
Hier zal het wel mee lukken!

:D
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.188s