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); ?>