Mysql SQL硬查询:其他事件之间的事件

Mysql SQL硬查询:其他事件之间的事件,mysql,sql,Mysql,Sql,我有以下三个表格(简化版): 标高: id(整数,主键,自动递增) globalId(Int,Key) 日期(日期时间,键) serverId(Int,Key) gamemodeId(Int,Key) mapId(Int,Key) 玩家加入: id(整数,主键,自动递增) globalId(Int,Key) 日期(日期时间,键) serverId(Int,Key) playerId(Int,Key) playerlaves: id(整数,主键,自动递增) globalId(Int,Ke

我有以下三个表格(简化版):

标高:

  • id(整数,主键,自动递增)
  • globalId(Int,Key)
  • 日期(日期时间,键)
  • serverId(Int,Key)
  • gamemodeId(Int,Key)
  • mapId(Int,Key)
玩家加入:

  • id(整数,主键,自动递增)
  • globalId(Int,Key)
  • 日期(日期时间,键)
  • serverId(Int,Key)
  • playerId(Int,Key)
playerlaves:

  • id(整数,主键,自动递增)
  • globalId(Int,Key)
  • 日期(日期时间,键)
  • serverId(Int,Key)
  • playerId(Int,Key)
关于这个问题,我已经思考了几个小时,但我似乎无法理解。我想要这样:选择levelsloaded中的所有行,该级别在玩家在服务器上玩的瞬间加载。

我曾试图完善这个“问题”,但这会使它变得不清楚

下面是一个示例图片:

您可以看到各种级别加载的事件:

  • 需要
    16:22:57
    上的那一个,因为它发生在我加入服务器之后(在我离开服务器之前)
  • 15:51:29
    15:37:10
    上的那些不应该发生,因为我没有在服务器上玩
我知道这个查询肯定是可能的,但是我不认为它是一个琐碎的查询

在此方面的任何帮助都将不胜感激。此外,我也非常感谢您提出的解决建议

编辑:我已经设法对查询进行了一些改进。获得解决方案的第一步是:创建一个子查询,获取玩家加入和玩家离开之间的每一级负载,只知道如何获取?考虑下面的事件表:

  • 地图1负载
  • 玩家A加入
  • 地图2负载
  • 地图3负载
  • 球员A离开
  • 地图4负载
  • 玩家A加入
  • 地图5负载
  • 地图6负载
  • 球员A离开
  • 地图7负载
  • 地图8负载
那么唯一正确的结果就是:地图2、3、5和6。
因此,我需要迭代结果集,获取玩家加入和后续玩家离开之间发生的所有映射,然后跳到下一行。

您还没有指定要使用的SQL风格类型,但使用通用SQL我相信可以:

SELECT *
FROM levelsloaded ll, playerjoins pj, playerleaves pl
WHERE ll.serverId = pj.serverId AND ll.serverId = pl.serverId AND 
      pj.playerId = $IDINQUESTION AND pl.playerId = $IDINQUESTION AND
      ll.date >= pj.date AND ll.date < pl.date;
选择*
从标高L开始,玩家加入pj,玩家离开pl
其中ll.serverId=pj.serverId和ll.serverId=pl.serverId和
pj.playerId=$IDINQUEST和pl.playerId=$IDINQUEST和
ll.date>=pj.date和ll.date

虽然我记不起日期是否包含时间戳。

图片?我们不是这样滚的。武器不是一个词。@嗯,我认为有图片比没有图片更好…仅供参考,我使用的是MySQL。但是对于画作,我不想选择
15:51:29
15:37:10
。。。在该时间戳之前和之后可能会有playerjon/leaves,假设它们也会出现在'00:00:00'和'23:59:59'上,为简单起见,那么您的查询仍然会选择已添加的
级别?虽然目的是不选择它们。我不确定我是否正确理解了这个问题,如果您想要与我想要的完全相反的结果,请在where子句中将其用作子查询。如果播放机加入/player离开表示播放机何时在服务器上。我透露的select语句将在玩家在线时抓取所有加载实例。很抱歉,我已经测试了查询。当玩家不在线时,它也会选择它们。您的查询所做的是:它拾取自玩家第一次加入服务器到最后一次离开服务器以来的每一级负载。但是他可以多次加入/离开,我想你已经忘记了:(抱歉。没有办法拥有sessionId吗?sessionId将是链接独特的PJ和pls的好方法。