2012-01-10 56 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