MySQL:需要检索所有记录但忽略旧条目

时间:2012-01-10 19:28:09

标签: mysql

我有一个简单的数据库,可以跟踪游戏中多个玩家的交易。

当两个玩家之间开始游戏时,会生成一个独特的 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,试图将查询保持在最低限度!

1 个答案:

答案 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