Cumulatieve som in mysql/php

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Jacub86
  • Registratie: April 2005
  • Laatst online: 15-09 21:10
Ik ben momenteel enkele grafieken aan het maken waarbij ik gebruik maak van mysql als database en php. Nu zag ik laatst in de karmagrafieken hier op tweakers hoe er een rode lijn als cumulatieve som liep, wat mij eigenlijk ook wel handig leek in mijn eigen grafieken. Maar nu komt het probleem: ik kan geen informatie vinden over hoe ik zo'n cumulatieve som kan krijgen zodat ik deze kan gebruiken in een while loop die ik gebruik om mijn grafiek te maken.

Ik krijg het wel voor elkaar om een cumulatieve som als output te krijgen door:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$query="SELECT * FROM movies";
$result=mysql_query($query);

$num=mysql_numrows($result);            
$i=0;

while ($i < $num) {
    
        $id=mysql_result($result,$i,"id");
        $duur=mysql_result($result,$i,"duur");
        
        $speelduur= $speelduur + $duur;
        
        $i++;
        }


Maar aangezien je bij ImageLine zowel de begin x,y en eind x,y waardes moet geven kan ik dit niet gebruiken om de lijn te creeren.

Ook heb ik al gekeken op internet naar oplossingen maar de enige oplossing die ik kon vinden was alleen te gebruiken in hele oude mysql < 4.1 versies door gebruik te maken van ik meen sub queries.

Ik hoop dat jullie nog een oplossing weten.

Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 19-09 21:26

DataGhost

iPL dev

Dit kan je volgens mij gewoon doen met SUM() in SQL. Een andere optie is je cumulatieve som in een array te prutsen en deze daarna opnieuw te doorlopen.
Je code klopt trouwens niet echt, volgens mij doet het vrij weinig.

[ Voor 35% gewijzigd door DataGhost op 10-02-2008 13:19 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?
WEB >> PRG

Ik zie het probleem niet zo; voor je lus maak je een variabele die je op 0 zet. Voor iedere 'periode' (dag, week, jaar, whatever) heb je een nieuwe x. Die variabele hoog je elke keer op met de waarde van die periode (zo is 'ie automatisch cumulatief) en plot je de x en y (=variabele).

code:
1
2
3
4
5
6
y = 0
voor elke periode
  x=x+1
  y=y + waarde(deze_periode)
  plot x,y  //<<zet een punt op x, y
loop

De begin positie is een kwestie van 2 extra variabelen en bijhouden waar je eindpositie vorige keer was...
code:
1
2
3
4
5
6
7
8
9
10
y = 0
begx = 0
begy = 0
voor elke periode
  x=x+1
  y=y + waarde(deze_periode)
  plot begx, begy to x,y  //<<trek een lijn van begx, begy naar x,y
  begx = x
  begy = y
loop


waarde(deze_periode) is in jouw geval wrsch. gewoon 'duur'.

[ Voor 93% gewijzigd door RobIII op 10-02-2008 14:13 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Jacub86
  • Registratie: April 2005
  • Laatst online: 15-09 21:10
Bedankt rob, heb het inmiddels opgelost

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
$query="SELECT * FROM movies WHERE datum like '%-01'";
$result=mysql_query($query);

$num=mysql_numrows($result);            
$i=0;
$x2=480/$maxid+8;
$y2=200;
$width=480/$maxid;

while ($i < $num) {
    
        $id=mysql_result($result,$i,"id");
        $duurtmp=mysql_result($result,$i,"duur");
        $duur=$duurtmp/16.25;
        
        $x1=$x2;
        $y1=$y2;
        $x2=$x1+$width;
        $y2=$y1 - $duur;        
        
        ImageLine($grafiek, $x1, $y1, $x2, $y2, $cumulatief);
        
        $i++;
        }