Er moeten totalen die tussen datums liggen berekend worden van een database. Ik heb nu een werkende oplossing via SQL, echter die is erg langzaam omdat per regel weer een nieuwe query uitgevoerd wordt. Misschien heeft iemand een handigere methode

De SQL Tabel(TEELT) bevat 3 kolommen: AANTAL, STARTDATUM, AANTALDAGEN.
In de tabel staan de volgende waardes:
1) 2; 2011-09-01; 3
2) 2; 2011-09-02; 3
3) 0; 2011-09-03; 0
4) 2; 2011-09-04; 3

De werkende SQL regel is:
1e regel: SELECT * from TEELT
Daarna voeren we van elke regel die opgevraagd is uit:
$startdatum=row[startdatum]
"SELECT SUM(AANTAL) from TEELT where '$startdatum' between STARTDATUM and DATE_ADD(STARTDATUM, interval +AANTALDAGEN day)".

Ik hoop dat iemand een goed idee heeft.

groet,

Laurens
SELECT SUM(AANTAL) from TEELT where STARTDATUM between STARTDATUM and DATE_ADD(STARTDATUM, interval +AANTALDAGEN day)

Kun je anders een voorbeeld laten zien van hoe je wilt dat je resultset wordt?
hier het gewenste resultaat:
Startdatum Aantal dagen Aantal Aantal in buffer
2011-09-01 3 2 2
2011-09-02 3 2 4
2011-09-03 0 0 4
2011-09-04 3 2 6
2011-09-05 3 2 6
2011-09-06 0 0 4
2011-09-07 0 0 4
2011-09-08 0 0 2
2011-09-09 3 2 2

Als php-code heb ik:

<?php
error_reporting(E_ALL ^ E_NOTICE);
$mysql_host = "172.16.2.2";
$mysql_user = "root";
$mysql_pasw = "root";
$mysql_db = "test";
$link = mysql_connect($mysql_host, $mysql_user, $mysql_pasw);
$db = mysql_select_db ($mysql_db);
$sql = "SELECT * FROM teelt";
$res = mysql_query ($sql);
echo "<table border ='1'>";
echo "<tr><th>Startdatum</th>";
echo "<th>Aantal dagen</th>";
echo "<th>Aantal</th>";
echo "<th>Aantal in buffer</th></tr>";
if($res){
while($row=mysql_fetch_array($res)){
$startdatum= $row["startdatum"];
$aantaldagen= $row["aantaldagen"];
$aantal= $row["aantal"];
$sql2="SELECT SUM(aantal) as aantal from teelt where '$startdatum' between startdatum and DATE_ADD(startdatum, interval +aantaldagen day)";
$result2 = mysql_query($sql2);
$row2 = mysql_fetch_assoc($result2);
$aantalinbuffer = $row2['aantal'];
echo "<tr><td>$startdatum</td>";
echo "<td>$aantaldagen</td>";
echo "<td>$aantal</td>";
echo "<td>$aantalinbuffer</td></tr>";
}
}else{
echo mysql_errno().": ".mysql_error()." at ".__LINE__." line in ".__FILE__." file<br>";
}
echo "</table>";
?>

De SQL-Database:
CREATE TABLE `test`.`teelt` (
`teeltid` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`aantal` INTEGER UNSIGNED,
`startdatum` DATE,
`aantaldagen` INTEGER UNSIGNED,
PRIMARY KEY (`teeltid`)
)
ENGINE = InnoDB;

De inhoud:
"teeltid","aantal","startdatum","aantaldagen"
1,2,"2011-09-01",3
2,2,"2011-09-02",3
3,0,"2011-09-03",0
4,2,"2011-09-04",3
5,2,"2011-09-05",3
6,0,"2011-09-06",0
7,0,"2011-09-07",0
8,0,"2011-09-08",0
9,2,"2011-09-09",3

met dit voorbeeld is het snel genoeg, echter is de volledige oplossing vele malen groter, en blijven de aantallen gerust 50 dagen in de buffer staan.


Reageren