24 часа ценностей - PullRequest
       6

24 часа ценностей

1 голос
/ 03 декабря 2010

У меня есть таблица sql: дата (Гм) / время (00:00:00) / мощность (INT)

Когда я выбираю дату из встроенного средства выбора даты, я пытаюсь опубликовать 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 />'; 
?>

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

Алан

Ответы [ 3 ]

2 голосов
/ 03 декабря 2010

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

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

Таким образом, вы получите результаты с time в 1-часовом диапазоне «сейчас - 24 часа» и «сейчас - 23 часа». Оператор МЕЖДУ эквивалентен следующему:

WHERE `time` >= DATE_SUB('".$choice."', INTERVAL 24 HOUR)
   AND `time` <= DATE_SUB('".$choice."', INTERVAL 23 HOUR) 
0 голосов
/ 08 декабря 2010

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

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

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

СпасибоТы очень много!

Алан

0 голосов
/ 03 декабря 2010

Вам нужен цикл для обхода строк:

$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 />'; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...