gpt4 book ai didi

mysql - SQL硬查询: events between other events

转载 作者:行者123 更新时间:2023-11-30 01:00:02 26 4
gpt4 key购买 nike

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

已加载关卡:

  • id(整数、主键、自动增量)
  • globalId(整数,键)
  • 日期(日期时间、键)
  • serverId(Int,键)
  • gamemodeId(Int,Key)
  • mapId(Int,键)

玩家加入:

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

玩家离开:

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

我已经对这个查询思考了几个小时,但我似乎无法弄清楚。我想要这样:从已加载的关卡中选择所有行,其中关卡是在玩家在服务器上玩游戏时加载的。

我试图细化这个“问题”,但这会使它变得不清楚。

这里是一个示例图片:

Example

您会看到各种关卡加载事件:

  • 想要 16:22:57 上的那个,因为它发生在我加入服务器之后(以及在我离开服务器之前)
  • 15:51:2915:37:10 上的情况不应该发生,因为我没有在服务器上玩游戏。

我知道这个查询绝对有可能,但我不认为这是一个简单的查询。

对此的任何帮助将不胜感激。非常感谢我自己解决这个问题的建议。

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

  • 加载 map 1
  • 玩家 A 加入
  • map 2 加载
  • map 3 加载
  • 玩家 A 离开
  • map 4 加载
  • 玩家 A 加入
  • map 5 加载
  • map 6 加载
  • 玩家 A 离开
  • map 7 加载
  • map 8 加载

那么唯一正确的结果将是: map 2、3、5 和 6。因此,我需要迭代结果集并获取玩家加入和后续玩家离开之间发生的所有 map ,然后跳到下一行。

最佳答案

您还没有指定您正在使用的 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;

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

关于mysql - SQL硬查询: events between other events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com