24小时的价值观

时间:2010-12-03 05:41:21

标签: php mysql date

我有一个sql表:date(Y-m-d)/ time(00:00:00)/ power(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 个答案:

答案 0 :(得分:2)

目前,您的SELECT仅向您提供当前时刻前24小时完全的结果。你需要的是一个范围。 1小时的示例(为了清楚起见,添加了缩进):

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

这样,您将在“现在 - 24小时”和“现在 - 23小时”的1小时范围内获得time的结果。 BETWEEN运算符等同于:

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

答案 1 :(得分: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 />'; 
}

答案 2 :(得分:0)

感谢大家的帮助!

问题出现在第一个字符串中,除了精彩的考试外,我只需更改日期格式!

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

非常感谢!

艾伦