[EXTRA] Statistieken | Score's
Ik zou graag de personen die deze week de meeste topic's gestart hebben, in een lijst willen plaatsen.
Zoals dit:
1 ............... Diov ------ 22
2 ............... Anne ------ 15
3 ............... Koen ------ 6
...
Er zouden maar 3 (misschien 5) gebruikers getoond moeten worden.
Ik vraag met af hoe ik dit best doe.
Met een cronjob, elk uur misschien?
-- Waarbij ik elk uur alle topic's tel per gebruiker & dit dan toevoeg bij mijn user tabel ?
Zonder cronjob?
-- Weet dan wel niet zo goed, hoe ik dit doe.
Als jullie ideeën hebben voor mij, laat maar horen
Ik zal ook nog even googlen op Leaderbord
Alvast bedankt
Mvg,
Diov
Edit:
Niet klein probleem, de datum:
http://www.phphulp.nl/php/forum/topic/statistieken-scores/89265/1/#641008
Gewijzigd op 17/02/2013 12:34:15 door - Diov -
Misschien begrijp ik het niet helemaal goed, maar volgens mij is dit gewoon het zelfde als bijvoorbeeld de laatste topics laten zien maar dan met een andere query....?
Dit kan toch gewoon als de pagina geladen wordt? de query zal wel iets ingewikkelder worden.
kun je je tabelnamen en kolomnamen eens posten?
En als de gebrbuiker een topic plaatst is deze ingelogd en kan je meteen iets in de user tabel zetten.
Want dit is makkelijk met 1 query op te lossen.
in phpBB kan je prima topics tellen. Gewoon tellen hoeveel berichten er eerste post zijn in een tijd-gebied.
Tabel: Topics
-- id -- starter_id -- topic_name -- ...
Enzoverder.
Starterd_id is het id van de gebruiker die het topic starte.
Nu zou ik graag alle topics tellen voor elke gebruiker.
En dat is mijn vraag.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT COUNT(topic_id) AS aantal, t.starter_id, t.topic_name, t.topic_id, u.user_name
FROM topics AS T
LEFT JOIN users AS u
ON (t.starter_id = u.user_id)
WHERE t.topic_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW()
GROUP BY topic_id
FROM topics AS T
LEFT JOIN users AS u
ON (t.starter_id = u.user_id)
WHERE t.topic_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW()
GROUP BY topic_id
Zoiets. Weet niet of het gelijk werkt (waarschijnlijk niet...)
Hiermee ben ik al heel veel vooruitgeschoven.
Je was alleen een Limit vergeten. En heb dit nu zonder cronjob gedaan.
De code heb ik wel niet in zijn geheel uitgevoerd
Gewijzigd op 16/02/2013 19:54:44 door - Diov -
Cronjobs zijn hier echt niet voor nodig.
Toevoeging op 17/02/2013 08:46:23:
Ja, en een ORDER BY en nog wel een aantal dingen. Welke query heb je nu?
Cronjobs zijn hier echt niet voor nodig.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT
u.user_id, u.user_name, COUNT(t.starter_id) AS aantal
FROM
users u
LEFT JOIN
topics t
ON u.user_id = t.starter_id
GROUP BY
u.user_id, u.user_name
ORDER BY
aantal DESC
u.user_id, u.user_name, COUNT(t.starter_id) AS aantal
FROM
users u
LEFT JOIN
topics t
ON u.user_id = t.starter_id
GROUP BY
u.user_id, u.user_name
ORDER BY
aantal DESC
Dit geeft je een overzicht van alle gebruikers met het aantal topics, ook de gebruikers met 0 topics
Nu heb ik 1 (klein) probleem.
Ik selecteer de records van 1 week geleden tot en met vandaag.
Maar ik zou ze eigenlijk per week willen hebben.
Dus eigenlijk:
van maandag Tot Zondag.
Dus als we dinsdag voorbeeld zijn.
Dan moet hij alle records nemen van die week.
Hoe doe ik dit het best?
Ik sla de datum op als datetime.
Mvg,
Diov
Gewijzigd op 17/02/2013 12:20:54 door - Diov -
Er is nog altijd een fout als ik je WHERE toevoeg.
Is dit misschien omdat ik het op de verkeerde plaats zet?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$sql_get_statiestieken_per_gebruiker = "SELECT u.username, p.promogever_id, p.datum COUNT(p.promonemer) As aantal
FROM leden AS u
LEFT JOIN promo AS p
WHERE DATE(p.datum) >= CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY
ON u.id = p.promogever_id
GROUP BY promogever_id
ORDER BY COUNT(promonemer) DESC
LIMIT 5 ";
?>
$sql_get_statiestieken_per_gebruiker = "SELECT u.username, p.promogever_id, p.datum COUNT(p.promonemer) As aantal
FROM leden AS u
LEFT JOIN promo AS p
WHERE DATE(p.datum) >= CURDATE() - INTERVAL WEEKDAY(CURDATE()) DAY
ON u.id = p.promogever_id
GROUP BY promogever_id
ORDER BY COUNT(promonemer) DESC
LIMIT 5 ";
?>
Inderdaad de verkeerde plaats, regel 6 en 7 omwisselen
Alleen snap ik je formule niet helemaal.
Toch bedankt!
Dit geeft de dag van de week -beginnend op maandag (0) en eindigend op zondag(6)- van de huidige datum.
Dit trekt x dagen af van de huidige datum, waar in dit geval x wordt ingevuld door het resultaat van de eerste functie. Vandaag is dat dus 6 en is het resultaat van het geheel dus 2013-02-11