У меня есть таблица 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");
Большое спасибо !
Алан