[PHP] Grafieken maken aan de hand van datums+tijden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18-09 13:39
Ik heb een visitcounter die elke bezoekershit opslaat. Van tevoren kijkt hij eerst of je die dag al niet gelogged bent, en zo niet, dan slaat hij je
"IP + datum&tijd + of je ingelogd bent" op.

Afijn, dat werkt goed, maar nu wil ik grafieken maken aan de hand van die gegevens.
Allereerst kijk ik hoeveel dagen de huidige maand heeft, x 12
Waarom maal 12? Ik wil een maandgrafiek laten zien, en wil uitberekenen hoeveel pixels ik in de breedte nodig zal hebben. Elke pixel in de breedte moet 2 uur in tijd voorstellen. De pixels in de hoogte geven het aantal hits in die 2 uur aan.
Dus normaal heeft een dag 24 uur, maar omdat ik niet elke pixel 1 uur wil, doe ik maal 12.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            <?
            $month = date("t"); // maximaal aantal dagen in huidige maand
            $month1 = $month * 12;
            $date2 = date("Y-m-01 00:00:00");
            $gettijdquery = "SELECT UNIX_TIMESTAMP(tijd),login 
                             FROM visits WHERE tijd > '$date2' ORDER BY tijd";
            $gettijdresult = mysql_query ( $gettijdquery );
            $gettijdaantal = mysql_num_rows ( $gettijdresult );
            $hoogte = $gettijdaantal / 100;
            ?><table width="<?= $month1 ?>" border="0" 
            cellpadding="0" cellspacing="0" align="center" bgcolor="white"><?
            while ( list ( $tijd, $login, ) = mysql_fetch_row ( $gettijdresult ) )
            {
                $tijd1 = date("H", $tijd); // het uur
                $tijd2 = date("j", $tijd); // de dag
            }
            ?>
            </table>


Als de dag 30 dagen heeft, dan krijg je een tabel van 360 pixels breed (30 x 12)
De hoogte moet 100 pixels zijn. Het maximum van iedere 2 uur moet bekeken worden, en dat moet dan de schaal vastleggen waarop elke pixel wordt ingekleurd.
Ik wil dus 360 pixels bij 100 pixels tabel maken. en elke <td> is 1 pixel hoog, en breed.

De tabel is in dit geval wit. Als het maximum van alle 2 uren bekeken wordt, en het maximum aantal bezoekers was 1000 (ok, ok het is veel, maar voor het voorbeeld), dan wordt dus de schaal, elke pixel hoog, is 10 unieke bezoekers.
Ik hoop dat je dat kunt volgen. Ik zit te denken aan for loopjes, maar kweet het niet precies. In ieder geval zitten er geen fouten in bovenstaande code, dus je kunt erop verder werken. Het kan best zijn dat het compleet anders moet. Ik weet alleen niet wat ik nu moet doen.

Weet iemand raad met dit? Plz geen javascriptjes aanraden (mits die er zijn)
Codeertaal: PHP op PHP 4.2.2
Dit lijkt me meer een probleem voor wiskundeknobbels _/-\o_

[ Voor 12% gewijzigd door Cheater op 16-12-2002 01:28 ]


Acties:
  • 0 Henk 'm!

  • DinX
  • Registratie: Februari 2002
  • Laatst online: 23:30

DinX

Motormuis

Marokko 2015: Route
Sat Tracker: SpotWalla
Blog: Gone for a ride


Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18-09 13:39
url werkt (nog) ??? niet !

Acties:
  • 0 Henk 'm!

  • DinX
  • Registratie: Februari 2002
  • Laatst online: 23:30

DinX

Motormuis

Hier werkt ie gewoon hoor

Marokko 2015: Route
Sat Tracker: SpotWalla
Blog: Gone for a ride


Acties:
  • 0 Henk 'm!

  • Freak_NL
  • Registratie: Juli 2000
  • Laatst online: 22-08 14:17
Eh? Elke table cell is 1x1 pixel??

Kijk eens naar de GD-lib mogelijkheden met PHP. Je kan prachtige grafieken bouwen in PHP door een PNG te generen met de GD-lib grafische functies. Hoe duidelijk zo'n grafiek wordt hangt helemaal af van je eigen code, maar als je de breedte van een dag al vast hebt staan wordt het al een stuk makkelijker. (hoewel een goed OO opgebouwd geheel de schaalbaarheid van een grafiek makkelijk kan afhandelen)

HTML tabellen zijn niet bedoelt als tekenmateriaal!

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18-09 13:39
HTML tabellen zijn niet bedoelt als tekenmateriaal!
Leuk gezegd ;) Ik gebruik HTML tabellen altijd om schaduwranden te maken, om het design van menu's vast te leggen, soms heb ik zelfs de neiging om hele tekeningen in tabellen te maken en elk vakje 1 bij 1 pixel te maken en in te kleuren.

[ Voor 95% gewijzigd door Cheater op 16-12-2002 08:06 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Als je het zo zou willen doen (wel een leuk idee trouwens), dan zou ik eerst proberen arrays te vullen met waardes true en false. Dus bijvoorbeeld een array van (12 * 1000) en dan de waardes daarin vullen. Daarna kun je met een loopje een tabel maken en op basis van de overeenkomstige waarde in de array een kleurtje aan de tabel geven.

Succes!

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18-09 13:39
ik heb nog wat zitten nadenken, maar ik kom alleen tot een resultaat , dat ik 31 queries moet gaan uitvoeren :( elke query met als WHERE tijd > '$tijd1' AND tijd < '$tijd2'
(let niet op de variablen, dat is als voorbeeld)

Dit lijkt me nou juist helemaal niet efficient

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18-09 13:39
Ik heb nog eens wat zitten nadenken en ik kan ook 36000 if regel codes neerzetten...
de opbouw van de grafiek zal als volgt moeten denk ik:
--------------> eerst in 1 pixel hoogte alles naar rechts, dan 1 pixel naar ondere ( </tr><tr> )
en dan weer -------------->

Acties:
  • 0 Henk 'm!

Verwijderd

Cheater schreef op 17 december 2002 @ 17:12:
ik heb nog wat zitten nadenken, maar ik kom alleen tot een resultaat , dat ik 31 queries moet gaan uitvoeren :( elke query met als WHERE tijd > '$tijd1' AND tijd < '$tijd2'
(let niet op de variablen, dat is als voorbeeld)

Dit lijkt me nou juist helemaal niet efficient
Ideetje: gebruik '($tijd+$offset) mod 7200' om een 2 uurs overgang te bepalen.
$tijd in seconden.

Verder: gebruik bv een gekleurde 1x1 pixel om je staafjes te bouwen als je echt niet met GD aan de slag wilt. In de <img>-tag zet je dan de height op de gewenste hoogte.

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 18-09 13:39
Ja dat begreep ik dat ik 1x1 pixels gekleurd moest maken, ik was trouwens van plan om een lijn grafiek te maken. Want onder de totale visits van die lijn, kan ik een lijn maken met ingelogde visitors (dus de people die al ingelogd zijn)

Wat ik nu heb is 800 regels aan code....(en dan heb ik nog maar 1 lijn van de grafiek (dus 31 dagen zonder hoogte)
Als ik de hoogte erbij ga doen, kom ik op 80.000 regels aan code... INefficient dus !!!

ik ga effe array's leren gebruiken
Pagina: 1