我只是希望通过MS Access数据库了解我现在面临的问题。我实际上可以从简单的查询语句中获得结果,但每当我使用Aggregate和/或Group By函数时,我都会收到错误。
$rowno = 1;
$query = "SELECT COL1, MIN(COL2) AS time_in, MAX(COL2) AS time_out FROM TBL
WHERE FORMAT(COL2, 'yyyy') = '2017'
GROUP BY COL1
ORDER BY COL2 DESC";
foreach ($dbh->query($query) as $row){
echo $rowno . ") " . $row['COL1'] . " - " . $row['time_in'] . " - " . $row['time_out'] . "<br/>";
$rowno++;
}
它给了我:
警告:为...中的foreach()提供的参数无效
我的困惑是为什么当实际上相同的查询语句与另一个MS Access数据库一起使用时,这些函数不起作用?这是数据或版本问题吗?我删除了MIN()
,MAX()
和GROUP BY
内容后,该声明正常有效。
但无论如何,这里有一个示例数据,可以在我目前正在使用的数据库中看到:
COL1 COL2
1 8/10/2017 4:53:31 PM
1 8/10/2017 4:50:31 PM
2 8/10/2017 4:43:31 PM
2 8/10/2017 4:40:31 PM
3 8/10/2017 4:33:31 PM
3 8/10/2017 4:30:31 PM
答案 0 :(得分:2)
当您使用总计查询时,您的ORDER BY语句不是聚合。这应该有效:
$query = "SELECT COL1, MIN(COL2) AS time_in, MAX(COL2) AS time_out FROM TBL
WHERE FORMAT(COL2, 'yyyy') = '2017'
GROUP BY COL1
ORDER BY MIN(COL2) DESC";
如果您的订单不是聚合,则可能发生冲突。假设您有下表:
COL1 COL2
1 8/10/2017 4:53:31 PM
1 8/10/2017 4:50:31 PM
2 8/10/2017 4:59:31 PM
2 8/10/2017 4:40:31 PM
如果您只是按COL2
订购,则Access无法知道是否应在COL1: 1
之前或之后放置COL1: 2
的汇总行,因为对于COL1:2
, COL2
比COL1: 1
更高(第3行)和更低(第4行)