[MySQL] Usage Overzichten

Pagina: 1
Acties:

  • DeSjaak
  • Registratie: December 2000
  • Laatst online: 12-12-2025
Ik ben bezig met de ontwikkeling van een systeem die statistieken genereert uit een database met daarin informatie over het gebruik van een bepaalde telefoon dienst.

Ik wil overzichten genereren die per uur van de dag weergeven hoeveel gebruikers er hebben ingebeld.

De tabel waarop ik de query's loslaat heeft even om het niet te complex te maken de volgende structuur:

Tabel: call
Attributen: call_id;datum-tijd;duur;


als ik wil weten hoeveel call er vandaag zijn gemaakt kan ik de volgende query gebruiken:

SELECT COUNT(call_id) from call where date = NOW() GROUP BY 1;

Ook wil ik weten hoe de calls zijn verdeeld over de dag:

SELECT hour(date) as Hours, count(call_id) as Calls FROM call GROUP BY 1

code:
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
+-------+-------+
| Hours | Calls |
+-------+-------+
|  NULL |     1 |
|     0 |   835 |
|     1 |   125 |
|     3 |    12 |
|     5 |    90 |
|     6 |    26 |
|     7 |    50 |
|     8 |   261 |
|     9 |  1438 |
|    10 |  1730 |
|    11 |  1974 |
|    12 |  1568 |
|    13 |  2570 |
|    14 |  1898 |
|    15 |  1922 |
|    16 |  1757 |
|    17 |   791 |
|    18 |   913 |
|    19 |   619 |
|    20 |   286 |
|    21 |   604 |
|    22 |   276 |
|    23 |   203 |
+-------+-------+


hier komt netjes een tabel uit maar alleen van de uren waarvan een record in de database zit zoals bijvoorbeeld staat 2 uur 's nachts er niet op. Ik zou hier graag een 2 in de eerste kolom met daarachter een 0 of NULL zien

code:
1
2
3
4
5
6
7
8
9
10
+-------+-------+
| Hours | Calls |
+-------+-------+
|  NULL |     1 |
|     0 |   835 |
|     1 |   125 |
|     2 |     0 |
|     3 |    12 |
|     4 |     0 |
|     5 |    90 |


Wie weet of dit mogelijk is met mysql? of zal ik dit in php moeten afvangen?

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 09-05 12:41
Op data die niet in de tabel staat is het wat moeilijk groeperen, ik zou dat in een php loop doen.

zoiets:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$result = mysql_query("dingen ophalen met order by of hours");
$recset = mysql_fetch_assoc($result);

for ($i=0; $i <= 23; $i++) {


if ($recset['Hours'] == $i) {
  //calls in database
  echo $recset['Hours'];
  echo $recset['Calls'];


} else {
  echo $i;
  //geen calls gevonden
}

 
  $recset = mysql_fetch_assoc($result);
}


er moet dan nog wel wat foutafvanging bij met mysql_num_rows controle of er nog rowsin de db zijn.

  • DeSjaak
  • Registratie: December 2000
  • Laatst online: 12-12-2025
Ik zat inderdaad ook aan zoiets te denken, maar zou het graag met mysql doen.

Is het niet mogelijk om een soort van left join te leggen tussen de uren van een dag en de uren in mijn calls tabel?

Verwijderd

Maak je een extra tabel aan met de uren van de dag en de join je met je andere tabel, anders zou je het idd in php moeten oplossen

  • DeSjaak
  • Registratie: December 2000
  • Laatst online: 12-12-2025
Ik heb bij MySQL.com iets vonden over kruistabllen dat zou je dan eventueel kunen gebruiken. De query wordt dan wel belachelijk lang.

http://dev.mysql.com/tech...rticles/wizard/index.html

Ik denk dat ik het maar bij de php hou