Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试从时间戳开始按月合计_Php_Mysql_Date - Fatal编程技术网

Php 尝试从时间戳开始按月合计

Php 尝试从时间戳开始按月合计,php,mysql,date,Php,Mysql,Date,我正在尝试从mysql和文件中获取每月的读数总和。日期位于sql文件的日期时间戳字段中 <?php $db = new mysqli('localhost', 'php06', 'php06', 'php00'); if (mysqli_connect_errno()) { echo "Error: Could not connect to database. Please try again later."; exit;} $query = "select reading

我正在尝试从mysql和文件中获取每月的读数总和。日期位于sql文件的日期时间戳字段中

<?php 
$db = new mysqli('localhost', 'php06', 'php06', 'php00');

if (mysqli_connect_errno()) {
  echo "Error: Could not connect to database.  Please try again later.";
  exit;}

$query = "select readingVolume, readingDate from Reading order by readingDate";
$result = $db->query($query);
while($row = $result->fetch_assoc()){
$mysqldate = $row['readingDate'];
$timestamp = strtotime($mysqldate);
$day = date("d", $timestamp);
$month = date("m", $timestamp);
$year = date("Y", $timestamp); 

if ($month = 01){
$JanRead = ($row['readingVolume'] + $JanRead);}
if ($month = 02){
$FebRead = ($row['readingVolume'] + $FebRead);}
if ($month = 03){
$MarRead = ($row['readingVolume'] + $MarRead);}
if ($month = 04){
$AprRead = ($row['readingVolume'] + $AprRead);}
if ($month = 05){
$MayRead = ($row['readingVolume'] + $MayRead);}
if ($month = 06){
$JunRead = ($row['readingVolume'] + $JunRead);}
if ($month = 07){
$JulRead = ($row['readingVolume'] + $JulRead);}
if ($month = 08){
$AugRead = ($row['readingVolume'] + $AugRead);}
if ($month = 09){
$SepRead = ($row['readingVolume'] + $SepRead);}
if ($month = 10){
$OctRead = ($row['readingVolume'] + $OctRead);}
if ($month = 11){
$NovRead = ($row['readingVolume'] + $NovRead);}
if ($month = 12){
$DecRead = ($row['readingVolume'] + $DecRead);}
}

$readingarray = array($JanRead,$FebRead,$MarRead,$AprRead,$MayRead,
                        $JunRead,$JulRead,$AugRead,$SepRead,$OctRead,
                        $NovRead,$DecRead);
print_r($readingarray);                         
?>

您的主要问题似乎是您正在使用
=
测试平等性,而您应该使用
=
。并且不要在整数前面加上
0
,除非您正在进行字符串比较并且数字前面加了前缀(例如,
$foo==1
,或
$foo==01

如果直接插入到阵列中,则可以使其更短:

$readingarray[$month] += $row['readingVolume'];

另外请注意,如果您按月分组并执行
SUM()
,则可以通过MySQL执行此查询。如果您的字段是日期类型,那么它将是微不足道的。作为UNIX时间戳,首先需要将其转换为日期。(一个额外的MySQL函数调用。)

您的主要问题似乎是您正在使用
=
测试相等性,而您应该使用
=
。并且不要在整数前面加上
0
,除非您正在进行字符串比较并且数字前面加了前缀(例如,
$foo==1
,或
$foo==01

如果直接插入到阵列中,则可以使其更短:

$readingarray[$month] += $row['readingVolume'];

另外请注意,如果您按月分组并执行
SUM()
,则可以通过MySQL执行此查询。如果您的字段是日期类型,那么它将是微不足道的。作为UNIX时间戳,首先需要将其转换为日期。(一个额外的MySQL函数调用。)

假设
readingDate
是MySQL中的
DATE
DATETIME
,您可能需要如下内容:

select SUM(readingVolume) as vol, MONTH(readingDate) from Reading order by readingDate group by MONTH(readingDate)
另外,正如konforce指出的:您正在测试赋值运算符是否相等

此外,在PHP中,前缀为
0
的数字被解释为八进制,因此
09
实际上是==
0


S

假设MySQL中的
readingDate
DATE
DATETIME
,您可能需要类似以下内容:

select SUM(readingVolume) as vol, MONTH(readingDate) from Reading order by readingDate group by MONTH(readingDate)
另外,正如konforce指出的:您正在测试赋值运算符是否相等

此外,在PHP中,前缀为
0
的数字被解释为八进制,因此
09
实际上是==
0


S

下面是一个SQL,它应该执行与以下相同的操作:


(更新:刚刚验证了可以在
分组方式中使用别名)

下面是一个SQL,它应该与以下操作相同:


(更新:刚刚验证了可以在
groupby
中使用别名)

假设PHP的时间戳转换总是等于MySQL的时间戳是错误的

您需要在MySQL中完成这项工作

选择SUM(readingVolume)作为vol 从阅读
GROUP BY FROM_UNIXTIME(readingDate,'%m')

假设PHP的时间戳转换始终等于MySQL的时间戳是错误的

您需要在MySQL中完成这项工作

选择SUM(readingVolume)作为vol 从阅读
GROUP BY FROM_UNIXTIME(readingDate,'%m')

SQL假定字段类型是正确的日期字段。可能是这样(考虑到strotime()
)的用法),但是如果它只是一个带有一些异常日期格式的字符字段,它将无法工作。(在这种情况下,我会修正DB类型。)konforce:是的,我先这样说。SQL假设字段类型是正确的日期字段。可能是这样(考虑到strotime())的用法),但是如果它只是一个带有一些异常日期格式的字符字段,它将无法工作。(在这种情况下,我会修正DB类型。)konforce:是的,我先这样说。顺便说一句,你可能希望避免在将来的问题中包含你的密码。顺便说一句,你可能希望避免在将来的问题中包含你的密码。