我有以下三个表(简化版):
levelsloaded:
playerjoins:
playerleaves:
我已经考虑了几个小时关于这个问题,但我似乎无法弄明白。我想要这样:在播放器正在服务器上播放的那一刻,从已加载关卡的levelloaded中选择所有行。
我试图改进“问题”,但这会让人不清楚。
这里的示例图片:
您会看到各种级别加载的事件:
16:22:57
上的那个,因为它是在我加入服务器之后(以及在我离开服务器之前)发生的。15:51:29
和15:37:10
上的内容不应该发生,因为我没有在服务器上播放。我知道这个查询肯定是可能的,但我认为这不是一个简单的查询。
对此有任何帮助将不胜感激。我也非常感谢你自己解决它的建议。
编辑:我设法优化了一点查询。获得解决方案的第一步是:创建一个子查询,获取玩家加入和玩家离开之间的每个级别负载,只有如何获得?请考虑以下事件表:
然后唯一正确的结果是:地图2,3,5和6。 所以我需要迭代结果集并获得玩家加入和后续玩家之间发生的所有地图,然后跳转到下一行。
答案 0 :(得分:0)
你没有指定你正在使用的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;
虽然我不记得日期是否包含时间戳。