Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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 Mysql查询到平均时间_Php_Mysql_Sql_Time_Average - Fatal编程技术网

Php Mysql查询到平均时间

Php Mysql查询到平均时间,php,mysql,sql,time,average,Php,Mysql,Sql,Time,Average,我玩了很多棋盘游戏,我维护了一个网站/数据库,其中记录了一些统计数据。其中一张表记录了不同的时间。其结构如下所示: 游戏名称(文本-棋盘游戏名称) numPeople(int-玩游戏的人数) 时间到达(时间戳-我们到达我们正在玩游戏的房子的时间) beginSetup(时间戳-开始设置游戏的时间) 开始播放(时间戳-我们实际开始玩游戏的时间) gameEnd(时间戳-游戏完成的时间) 基本上,我想做的是利用这些时间从中获取一些有趣/有用的信息(例如,什么游戏平均需要最长的时间来设置,什么游戏

我玩了很多棋盘游戏,我维护了一个网站/数据库,其中记录了一些统计数据。其中一张表记录了不同的时间。其结构如下所示:

  • 游戏名称(文本-棋盘游戏名称)
  • numPeople(int-玩游戏的人数)
  • 时间到达(时间戳-我们到达我们正在玩游戏的房子的时间)
  • beginSetup(时间戳-开始设置游戏的时间)
  • 开始播放(时间戳-我们实际开始玩游戏的时间)
  • gameEnd(时间戳-游戏完成的时间)
基本上,我想做的是利用这些时间从中获取一些有趣/有用的信息(例如,什么游戏平均需要最长的时间来设置,什么游戏平均需要最长的时间来玩,什么游戏从到达到完成最长的时间,等等)。通常,我太依赖PHP了,我只会做一个选择*。。。抓取所有的时间,然后做一些PHP计算,以找到所有的统计数据,但我知道MySQL可以通过查询为我完成所有这些。不幸的是,当涉及到更复杂的查询时,我会迷路,所以我需要一些帮助

我想举几个查询的例子,希望有人让我开始后,我能找出其他平均时间查询。在玩棋盘游戏的最长时间内,查询的平均结果是什么?平均来说,最快的游戏/时间设置如何

其他信息: 你让我有了一个很好的开始,但是我没有得到我期望的结果。我给了你一些真实的例子。。。 我有一个名为Harper的游戏,它已经玩了两次(所以数据库中有两条记录,其中包含时间entires)。以下是《纽约时报》的情况:

beginSetup(1) = 2012-07-25 12:06:03
startPlay(1) = 2012-07-25 12:47:14
gameEnd(1) = 2012-07-25 13:29:45

beginSetup(2) = 2012-08-01 12:06:30
startPlay(2) = 2012-08-01 12:55:00
gameEnd(2) = 2012-08-01 13:40:32
然后,当我运行您提供给我的查询时(我将秒数转换为小时/分钟/秒),我得到了这些结果(对不起,我不知道如何处理您所做的酷表):


从数字来看,平均总时间应该是1小时24分钟,而不是3小时34分钟。知道我为什么会得到不正确的数字吗?

这里有一个查询,可以获得每个游戏的平均设置时间和游戏时间,希望它能有所帮助:

SELECT
  gameName,
  AVG(UNIX_TIMESTAMP(startPlay) - UNIX_TIMESTAMP(beginSetup)) AS setupTime,
  AVG(UNIX_TIMESTAMP(gameEnd) - UNIX_TIMESTAMP(startPlay)) AS gameTime,
  AVG(UNIX_TIMESTAMP(gameEnd) - UNIX_TIMESTAMP(beginSetup)) AS totalTime,
FROM `table`
GROUP BY gameName
ORDER BY totalTime DESC;
应产生与以下类似的结果:

+----------+-----------+-----------+-----------+
| gameName | setupTime | gameTime  | totalTime |
+----------+-----------+-----------+-----------+
| chess    | 1100.0000 | 1250.0000 | 2350.0000 |
| checkers |  466.6667 |  100.5000 |  933.3333 |
+----------+-----------+-----------+-----------+
我刚刚插入了大约8个测试行,其中包含一些随机数据,所以我的数字没有意义,但这就是您将得到的结果


请注意,这将扫描整个表,因此可能需要一些时间,具体取决于此表中的记录数。如果你有大量的游戏记录,你肯定希望定期在后台运行它。

对于设置所需的时间,你可以编写如下内容:

SELECT DATEDIFF(HOUR, BeginSetup, StartTime) -- in hours how long to set up

如果不知道您的桌子是什么样子,就无法回答您的问题。否则我们只是在黑暗中投掷飞镖。“平均最长的时间”?我不太明白。如果您没有子组来获取“最长时间”,那么如何计算“最长时间”的平均值?@Pardalman我想OP需要一个查询来完成所有这些。您是时间列unix时间戳(即整数)还是字符串(YYYY-MM-DD H:I:s)?您尝试过哪些查询?我想您可能会想使用GROUP BY,计算差异,并使用COUNT。这很接近,但它给了我一些奇数,我不知道它是如何产生的。例如,我有一个“游戏1”,它有两条记录,这些时间是:beginSetup(1)=2012-07-25 12:06:03 gameEnd(1)=2012-07-25 13:29:45 beginSetup(2)=2012-08-01 12:06:30 gameEnd(2)=2012-08-01 13:40:32。当我这样做时:
code
选择gameName,AVG(开始播放-开始播放)作为设置时间,AVG(游戏结束-开始播放)作为游戏时间,AVG(游戏结束-开始播放)作为总时间,从
表中选择GROUP BY gameName ORDER BY totalTime DESC;我以为你的值是unix时间戳。尝试将查询中的所有时间转换为unix时间戳。示例:
选择gameName,AVG(UNIX_时间戳(startPlay)-UNIX_时间戳(beginSetup))作为setupTime,AVG(UNIX_时间戳(gameEnd)-UNIX_时间戳(startPlay))作为gameTime,AVG(UNIX_时间戳(gameEnd)-UNIX_时间戳(beginSetup))作为totalTime,从表组按gameName顺序按totalTime DESC排序转换为unix时间戳成功了。非常感谢!
SELECT DATEDIFF(HOUR, BeginSetup, StartTime) -- in hours how long to set up