我有一个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 />';
?>
另一个人已经确认代码不起作用,是否有人有一个有用的解决方案来修复错误?
艾伦
答案 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");
非常感谢!
艾伦