Ik ben voor mijn website bezig met een statistiekentooltje. Hier is onder andere een overzicht opgenomen van het aantal hits en sessions van vandaag, gisteren, deze -en vorige week, deze -en vorige maand. Ik gebruik hiervoor de volgende functie:
Ik heb alleen erg het gevoel dat dit veel korter / efficienter kan, al zie ik het niet. Wat vinden jullie ervan? Wie heeft tips hoe dit korter op te schrijven?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| function stats_period($timeframe) { $sql = 'SELECT date, SUM(hits) AS hits, SUM(sessions) AS visits FROM stats_dt '; switch ($timeframe) { case 'today': $today = date("Y-m-d", mktime(0, 0, 0, date('n'), date('j'), date('Y'))); $sql.= "WHERE date = '$today'"; break; case 'yesterday': $yesterday = date("Y-m-d", mktime(0, 0, 0, date('n'), date('j') - 1, date('Y'))); $sql.= "WHERE date = '$yesterday'"; break; case 'this_week': $today = date("Y-m-d", mktime(0, 0, 0, date('n'), date('j'), date('Y'))); $week_start = date("Y-m-d", mktime(0, 0, 0, date('n'), date('j') - date('w'), date('Y'))); $sql.= "WHERE date BETWEEN '$week_start' AND '$today'"; break; case 'prev_week': $week_start = date("Y-m-d", mktime(0, 0, 0, date('n'), date('j') - (date('w') + 7), date('Y'))); $week_end = date("Y-m-d", mktime(0, 0, 0, date('n'), date('j') - (date('w') + 1), date('Y'))); $sql.= "WHERE date BETWEEN '$week_start' AND '$week_end'"; break; case 'this_month': $today = date("Y-m-d", mktime(0, 0, 0, date('n'), date('j'), date('Y'))); $month_start = date("Y-m-d", mktime(0, 0, 0, date('n'), 1, date('Y'))); $sql.= "WHERE date BETWEEN '$month_start' AND '$today'"; break; case 'prev_month': $month_start = date("Y-m-d", mktime(0, 0, 0, date('n') - 1, 1, date('Y'))); $month_end = date("Y-m-d", mktime(0, 0, 0, date('n'), 0, date('Y'))); $sql.= "WHERE date BETWEEN '$month_start' AND '$month_end'"; break; } $sql.= ' GROUP BY date DESC'; return db_fetch_object(db_query($sql)); } |
Ik heb alleen erg het gevoel dat dit veel korter / efficienter kan, al zie ik het niet. Wat vinden jullie ervan? Wie heeft tips hoe dit korter op te schrijven?