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)
- id(整数,主键,自动递增)
- globalId(Int,Key)
- 日期(日期时间,键)
- serverId(Int,Key)
- playerId(Int,Key)
- 需要
上的那一个,因为它发生在我加入服务器之后(在我离开服务器之前)16:22:57
和15:51:29
上的那些不应该发生,因为我没有在服务器上玩15:37:10
- 地图1负载
- 玩家A加入
- 地图2负载
- 地图3负载
- 球员A离开
- 地图4负载
- 玩家A加入
- 地图5负载
- 地图6负载
- 球员A离开
- 地图7负载
- 地图8负载
因此,我需要迭代结果集,获取玩家加入和后续玩家离开之间发生的所有映射,然后跳到下一行。您还没有指定要使用的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的好方法。