【问题标题】:PDO fetchAll to array different output than SQL requestPDO fetchAll 以排列与 SQL 请求不同的输出
【发布时间】:2017-07-30 12:03:42
【问题描述】:

我有 MySQL DB,它每分钟存储一次数据(对于日期 1.7.2017,我有 1012 个值 1):

id| value |timeDate
1 | 1     |2017-07-01 ...
2 | 0     |2017-07-01 ...
3 | 1     |2017-07-01 ...
.....

我想每天计算值为 1 的值(函数):

$stmt = $db->prepare("SELECT day(dTimeDate), COUNT(*) FROM sensorData
        WHERE MONTH(dTimeDate) = :dateMonth AND YEAR(dTimeDate) = :dateYear AND _idSensor = :idSensor AND dValue = :valueSensor
        GROUP BY dTimeDate");
$stmt->execute(array(':dateMonth' => $m, ':dateYear' => $y, ':idSensor' => $idSensor, ':valueSensor' => $valueSensor));
$row2 =$stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($row2 as $row) {
    echo $row['day(dTimeDate)']. ' - ' .$row['COUNT(*)'].'<br/>';
}

我希望得到(比如我的 SQL,example):

(day | Count)
1 - 1012 (count all values with value 1 in day 1)
2 - 105
...(31 lines, one for every day)

相反,我得到:

(day | Count)
1 - 1
1 - 1
...(1012 lines of day 1 and value 1)
2 - 1

row2 返回所有数据的数组,而不是每天。

我怎样才能得到期望值?

【问题讨论】:

  • 尝试GROUP BY dTimeDate, value
  • 我试过了,得到同样的数据。
  • 我试图重现您的代码行为。我不确定您的预期结果是什么意思。 1和2是什么? id 还是值?
  • 我的选择'SELECT day(dTimeDate), COUNT(*) FROM sensorData' 返回日期和计数值。这意味着'第 1 - 1012 天(按第 1 天计算值)。 'row2' 重新生成所有数据的数组(请参阅更新)。

标签: php sql pdo


【解决方案1】:

代码有一点小错误:-

group by dTimeDate 更改为group by day(dTimeDate)

更正完整代码

$stmt = $db->prepare("SELECT day(dTimeDate), COUNT(*) FROM sensorData
    WHERE MONTH(dTimeDate) = :dateMonth AND YEAR(dTimeDate) = :dateYear AND _idSensor = :idSensor AND dValue = :valueSensor
    GROUP BY day(dTimeDate)");

$stmt->execute(array(':dateMonth' => $m, ':dateYear' => $y, ':idSensor' => $idSensor, ':valueSensor' => $valueSensor));
$row2 =$stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($row2 as $row) {
    echo $row['day(dTimeDate)']. ' - ' .$row['COUNT(*)'].'<br/>';
}

【讨论】:

  • 感谢这个明显的错误,我花了将近 2 天的时间 :)
  • 没关系,欢迎。只是一个建议。当你无法找到错误时,要么逐行调试,要么将东西搁置几个小时,然后再查看它。
猜你喜欢
  • 2011-02-15
  • 2014-11-05
  • 2014-02-05
  • 2018-01-20
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
相关资源
最近更新 更多