2012-01-10 57 views
1

我有一个简单的数据库,用于跟踪来自游戏中多个玩家的交易。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或访问ID = user_id”。然而,这将返回该特定用户的所有行,我想限制查询给出给定的时间戳的最近的game_id的数据行。 时间戳是一个实际的UNIX时间戳,但出于示例目的,这更具可读性。

当说的和做,这个查询需要返回以下时user_id说明 = 1:

game_id | home_id | visiting_id | timestamp | ... 
    3   2   1  00000004 
    4   1   3  00000003 

请让我知道如果我需要进一步明确。

谢谢。

在附注中,我将清除比x天更早的条目的数据库。但这将是一个每天运行一次的cron,试图将查询保持在最低限度!

+0

使用限制关键字和ORDER BY子句 【来源】(http://bytes.com/topic/mysql/answers/440150-select-one-row-mysql-table) – hrezs 2012-01-10 19:34:15

回答

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 
+0

向上和跑!只进行了十分钟的测试,但是从我可以告诉的这正是我需要的!非常感谢您的准时和格式正确的答案! – BajaBob 2012-01-10 19:57:42