为什么不是我的MySQL组按小时与半小时文件不显示相同的数据?

时间:2010-03-29 19:58:13

标签: php mysql time date

我需要能够以15分钟的增量显示不同显示类型的数据。我有两个问题给我带来麻烦。一个显示数据半小时,另一个显示数据按小时。唯一的问题是数据总数在查询之间发生变化。它不计算时间帧之间发生的数据,仅计算时间帧。

例: 上午7:15有5件事情发生。 2发生在上午7:30,4发生在上午7:00。

15分钟视图显示所有数据。 半小时视图显示上午7:00和上午7:30的数据,但忽略了早上7:15 小时显示仅显示上午7:00的数据

以下是我的疑问:

$query="SELECT * FROM data WHERE startDate='$startDate' and queue='$queue' GROUP BY HOUR(start),floor(minute(start)/30)";

$query="SELECT * FROM data WHERE startDate='$startDate' and queue='$queue' GROUP BY HOUR(start) ";

如何以像我一样的方式提取数据但是包含所有数据?

问题是数据存储在mysql表中的方式吗?目前我有一个包含日期的列(2010-03-29)和一个包含时间的列(00:00)我是否需要将这些转换为其他内容?

2 个答案:

答案 0 :(得分:3)

你正在解释'group by'错误。您不会“分组”多个记录,因此您可以通过一次fetchrow()调用获取所有记录。发生的情况是数据库会将所有与group-by子句匹配的记录合并到一个记录中。拿一个简单的比赛得分表:

id   playername  score
----------------------
1    John        23
2    Fred        12
3    Jack        9
4    John        18

如果您执行了以下查询:SELECT id, playername, score FROM table GROUP BY playername,您将获得以下结果集:

id   playername  score
----------------------
1    John        23
2    Fred        12
3    Jack        9

喂!约翰#4去了哪里?他已经消失了,因为id#4的行与GROUP BY子句匹配,并且已经折叠到找到匹配的第一行(#1)。它本身不是很有用,你现在已经丢失了与id#4相关的所有数据。但这是聚合函数(总和,计数,平均值等)发挥作用的地方:SELECT id, playername, SUM(score) FROM table GROUP BY playername

id   playername  score
----------------------
1    John        41   <---notice the change (23 + 18 = 41)
2    Fred        12
3    Jack        9

根据您的疑问,您有两种选择:

  1. 按原样保留GROUP BY,并对查询中的分组数据执行任何计算(求和,计数,平均等等),以便获得每个匹配时间段的聚合结果< / LI>
  2. 删除GROUP BY子句,在您的应用程序中执行您想要的任何计算
  3. 将GROUP BY子句转换为查询中的结果字段,以便您可以根据以下新列处理代码中的每个句点:SELECT *, HOUR(start), FLOOR(MINUTE(start)/30) FROM data

答案 1 :(得分:1)

GROUP BY错误,您不在查询中使用任何聚合函数。删除GROUP BY,数据库现在必须猜测应该选择哪些记录。数据库不应该猜测,他们必须得到正确的答案,只有正确的答案。

更改SQL MODE并创建正确的查询。