2010-12-03 2 views
1

у меня есть таблицы SQL: Дата (ГМД)/время (00:00:00)/мощность (INT)24 часа значений

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

За день, мне нужно 24 значений за каждый час «100,200,300,200,300 и т.д ..»

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

<?php 
$choice = (isset($_POST['choice'])) 
      ? date("Y-m-d",strtotime($_POST['choice'])) 
      : date("Y-m-d"); 
$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 />'; 
?> 

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

Алан

+0

Объясните подробности, что не работает. – zerkms 2010-12-03 07:42:53

+0

Я не получаю значения, которые я прошу ... Сценарий, указанный выше, предназначен для получения значений 1 день (1 значение для каждого из 24 часов за один день) 23, 23, 21, 12, 15 и т. Д. ... Мне нужны эти значения для графика «день», который я планирую на своем веб-сайте. Я также планирую график в течение месяца (значения по дням и график для года (значения по месяцам). Код не дает значений, и я прошу помочь исправить ошибку, которая должна быть в формулировке – hkalan2007 2010-12-03 07:50:08

ответ

0

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

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

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

Thank You Very Much!

Alan

2

На данный момент, ваш 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) 
+0

Здравствуйте, Большое вам спасибо! Я понимаю, что ... Я бы использовал тот же метод для выбора дней месяца и месяцев года, но я бы использовал «дату» и «месяц» в месте из «времени» – hkalan2007 2010-12-03 09:56:47

0

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

$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 />'; 
} 
Смежные вопросы