connect_errno) {
die('Failed to connect to the database server - ' . $mysqli->connect_error);
}
#
# The db querys
#
$result = $mysqli->query('SET time_zone="+00:00"');
if (!$result) {
die('ERROR - TZ Statement');
}
$queryYears = 'SELECT DISTINCT YEAR(LogDate) AS year FROM Dayfile ORDER BY year';
// get the years for the database
$resultYears = $mysqli->query($queryYears);
if (!$resultYears) {
die('ERROR - Bad Select Statement 1');
}
// set the URL parameter inputs
$result = $mysqli->query('SET @baseTemp1 = ' . $baseTemp1 . ', @baseTemp2 = ' . $baseTemp2 . ',@startMonth =' . $startMonth . ',@tempCapAt30C =' . $tempCapAt30C . ';');
if (!$result) {
die('ERROR - Config Statement');
}
// for each year get the data
while($rowYear = $resultYears->fetch_array()) {
$currYear = $rowYear[0];
$currYear1 = $currYear + 1;
// construct a new query for the data
$query =
'SELECT '.
' UNIX_TIMESTAMP(LogDateCommon), '.
' Year,'.
' ROUND(annual_growing_degree_day_base_1,1) AS annual_growing_degree_day_base_1, '.
' ROUND(annual_growing_degree_day_base_2,1) AS annual_growing_degree_day_base_2 '.
' FROM ( '.
' WITH gdd AS ('.
' /* determine the GDD as the delta of avg temp - base temp */'.
' SELECT '.
' LogDate,'.
' CASE WHEN @startmonth = 1 THEN DATE_FORMAT(LogDate, "2000-%m-%d") '.
' WHEN MONTH(LogDate) >= @startmonth AND @startMonth = 2 THEN DATE_FORMAT(LogDate, "2000-%m-%d") '.
' WHEN MONTH(LogDate) < @startmonth AND @startMonth = 2 THEN DATE_FORMAT(LogDate, "2001-%m-%d") '.
' WHEN MONTH(LogDate) >= @startmonth THEN DATE_FORMAT(LogDate, "1999-%m-%d") '.
' ELSE DATE_FORMAT(LogDate, "2000-%m-%d") END AS LogDateCommon,' .
' CASE WHEN MONTH(LogDate) <= @startMonth - 1 THEN YEAR(LogDate) - 1 ELSE YEAR(LogDate) END AS year, '.
' CASE WHEN AvgTemp > @baseTemp1 THEN AvgTemp - @baseTemp1 ELSE 0 END AS growing_degree_day_base_1, '.
' CASE WHEN AvgTemp > @baseTemp1 THEN AvgTemp - @baseTemp2 ELSE 0 END AS growing_degree_day_base_2 '.
' FROM ( '.
' /* determine the avg temp for each day */'.
' SELECT LogDate, CASE WHEN MinTemp IS NOT NULL AND MaxTemp IS NOT NULL THEN (MinTemp + MaxTemp) / 2 ELSE 0 END AS avgTemp '.
' FROM ( '.
' /* cap max temps at 30 C? */'.
' SELECT LogDate, MinTemp, CASE WHEN MaxTemp > 30 AND @tempCapAt30C = TRUE THEN 30 ELSE MaxTemp END AS MaxTemp '.
' FROM Dayfile '.
' WHERE LogDate >= "2010-02-14" '.
' ) AS groupedData '.
' ) AS AvgTemp '.
' ) '.
' SELECT '.
' /* determine the annual cumulative GDD for each year */'.
' LogDate, '.
' LogDateCommon,'.
' year, '.
' SUM(growing_degree_day_base_1) OVER (PARTITION by year ORDER BY LogDateCommon) AS annual_growing_degree_day_base_1, '.
' SUM(growing_degree_day_base_2) OVER (PARTITION by year ORDER BY LogDateCommon) AS annual_growing_degree_day_base_2 '.
' FROM gdd '.
') AS annualGDD '.
'WHERE LogDate >= "' . $currYear . '-01-01" '.
'AND LogDate < "' . $currYear1 . '-01-01" ';
$result = $mysqli->query($query);
if (!$result) {
die('ERROR - Bad Select Statement query ' . $currYear . ' ' . $mysqli->error . '
' . $query);
}
// import the rows and put the data into arrays
while($row = $result->fetch_array()) {
$GDD1[$row[1]][] = array(($row[0] + 6000) *1000, (float)$row[2]);
$GDD2[$row[1]][] = array(($row[0] + 6000) *1000, (float)$row[3]);
}
}
// import the rows and put the data into arrays by key name, along with selected options
$return[$BaseTemp1key] = $GDD1;
$return[$BaseTemp2key] = $GDD2;
$return["options"] = array("gddBase1" => $baseTemp1,"gddBase2"=> $baseTemp2,"startMon"=> $startMonth);
// close connection
$mysqli->close();
header('Content-type: text/json');
header('Cache-Control: private');
echo json_encode($return);
?>