我需要能够以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)我是否需要将这些转换为其他内容?
答案 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
根据您的疑问,您有两种选择:
SELECT *, HOUR(start), FLOOR(MINUTE(start)/30) FROM data
答案 1 :(得分:1)
GROUP BY错误,您不在查询中使用任何聚合函数。删除GROUP BY,数据库现在必须猜测应该选择哪些记录。数据库不应该猜测,他们必须得到正确的答案,只有正确的答案。
更改SQL MODE并创建正确的查询。