24 часа значений

У меня есть таблица sql: date (Ymd) / time (00:00:00) / power (INT)

Когда я выбираю дату из встроенного datepicker, я пытаюсь опубликовать 3 графика HighCharts (один-24 часа, два-31 день месяца, три-12 месяцев в году), и мне нужно получить значения из таблицы для диаграмму, которая будет создана.

В течение дня мне нужны 24 значения за каждый час «100,200,300,200,300 и т. Д.».

Вот PHP для «дня», но он не работает …

<?php $choice = (isset($_POST['choice'])) ? date("Ymd",strtotime($_POST['choice'])) : date("Ymd"); $con = mysql_connect("localhost","root","xxxxxx"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("inverters", $con); $sql = "SELECT HOUR(time), COUNT(power) FROM feed WHERE time = DATE_SUB('".$choice."', INTERVAL 24 HOUR) GROUP BY HOUR(time) ORDER BY HOUR(time)"; $res = mysql_query($sql) or die('sql='.$sql."\n".mysql_error()); $row = mysql_fetch_assoc($res); echo $row['choice'].'<br />'; ?> 

Это подтверждается другим человеком, что код не работает, может ли кто-нибудь найти полезное решение для исправления ошибки?

Алан

На данный момент ваш SELECT дает вам только результаты, которые произошли ровно за 24 часа до текущего момента. Вам нужен диапазон. Пример в течение 1 часа (добавление для четкости):

 WHERE `time` BETWEEN DATE_SUB('".$choice."', INTERVAL 24 HOUR) AND DATE_SUB('".$choice."', INTERVAL 23 HOUR) 

Таким образом, вы получите результаты со time в 1-часовом диапазоне «сейчас – 24 часа» и «сейчас – 23 часа». Оператор BETWEEN эквивалентен этому:

 WHERE `time` >= DATE_SUB('".$choice."', INTERVAL 24 HOUR) AND `time` <= DATE_SUB('".$choice."', INTERVAL 23 HOUR) 

Вам нужна петля, чтобы ходить по строкам:

 $sql = " SELECT HOUR(time) as h, power FROM feed WHERE date = '".$choice."' ORDER BY HOUR(time)"; $res = mysql_query($sql) or die('sql='.$sql."\n".mysql_error()); while($row = mysql_fetch_assoc($res)) { echo $row['h'].":".$row['power']'<br />'; } 

Это даст вам мощность в день за данный месяц:

 $sql = " SELECT DAY(date) as d, SUM(power) as powerday FROM feed WHERE MONTH(date) = '".$month."' GROUP BY DAY(date) ORDER BY DAY(date)"; $res = mysql_query($sql) or die('sql='.$sql."\n".mysql_error()); while($row = mysql_fetch_assoc($res)) { echo $row['d'].":".$row['powerday']'<br />'; } 

Спасибо всем за вашу помощь!

Проблема была в первой строке, мне нужно было изменить формат даты в дополнение к вашим замечательным экзаменам!

 $choice = (isset($_POST['choice'])) ? date("m",strtotime($_POST['choice'])) : date("m"); 

Большое спасибо !

Алан