我有一个简单的数据库,可以跟踪游戏中多个玩家的交易。
当两个玩家之间开始游戏时,会生成一个独特的 game_id 并存储在名为 game_ids 的单独数据库中。在我查询的数据库中( game_transactions )我需要发生以下情况......
表 game_transactions 示例数据:
game_id | home_id | visiting_id | timestamp | ...
3 1 2 00000001
4 1 3 00000001
3 2 1 00000002
3 1 2 00000003
4 1 3 00000002
3 2 1 00000004
4 1 3 00000003
如您所见,当一名玩家完成转弯时,他们的游戏会被添加到此表中。这一直持续到游戏完成。我想要做的是通过user_id“WHERE home_id = user_id OR visiting_id = user_id”进行搜索时获取所有行。但是,这将返回该特定用户的所有行,我想限制查询,以便通过给定的时间戳为MOST RECENT game_id 提供数据行。 时间戳是实际的UNIX时间戳,但出于示例目的,这更具可读性。
说完了,当 user_id = 1时,此查询需要返回以下内容:
game_id | home_id | visiting_id | timestamp | ...
3 2 1 00000004
4 1 3 00000003
如果我需要进一步澄清,请告诉我。
谢谢。
在旁注中,我将清除早于 x 天的条目数据库。但这将是一个每天运行一次的cron,试图将查询保持在最低限度!
答案 0 :(得分:2)
SELECT gt.game_id, gt.home_id, gt.visiting_id, gt.timestamp
FROM game_transactions gt
INNER JOIN (SELECT game_id, MAX(timestamp) AS MaxTimestamp
FROM game_transactions
WHERE 1 IN (home_id, visiting_id)
GROUP BY game_id) q
ON gt.game_id = q.game_id
AND gt.timestamp = q.MaxTimestamp