2009-08-06 42 views
0

問:我該如何製作MySQL?最近幾天選擇在以內玩過所有玩過遊戲的用戶?>?x遊戲數量SQL僅選擇在最近y天內玩過x次遊戲的玩家?

這全部用於遊戲階梯。我使用兩個表格:weblPlayers只有用戶信息(用戶名,電子郵件,密碼等),weblGames會報告每個已報告的遊戲的結果以及日期和時間,格式正確的報告。

這裏是他們的截圖:

weblGames

WeblPlayers有字段:player_id |名稱|電子郵件| etc |等等。在報告遊戲時發現weblGames中的贏家或失敗者的名字對應於在WeblPlayers中找到的相同名稱。

回答

2
SELECT userid, count(*) as numgames 
from weblGames g 
where g.dateplayed >= now() - y 
group by userid 
having count(*) > x 
; 

您可以隨時將其加入weblPlayers以獲取其餘信息。

[編輯]

對不起 - 沒有注意到的贏家和輸家的事情。嘗試:

SELECT userid, count(*) as cnt 
FROM 
(
    SELECT winner as userid 
    from weblGames g 
    where g.reported_on >= now() - y 
    UNION ALL 
    SELECT loser as userid 
    from weblGames g 
    where g.reported_on >= now() - y 
) t 
GROUP BY userid 
HAVING COUNT(*) > x; 
+0

非常感謝=)這是完美的,只需要在y之後的「日」。下面會選擇每一個起到3場或更多的比賽,最近4天球員: SELECT用戶ID,COUNT(*)AS CNT FROM( SELECT得主AS用戶ID FROM webl_games摹 WHERE g.reported_on>現在() - INTERVAL 4 DAY UNION ALL SELECT失敗者AS的userid FROM webl_games克 WHERE g.reported_on>現在() - INTERVAL 4 DAY )噸 GROUP BY的userid HAVING COUNT(*)> = 3 – eyerouge 2009-08-06 01:32:48

+0

噢,呃...我沒有考慮INTERVAL功能。 – 2009-08-06 01:39:58

1

這是在MSSQL語法,但給你的想法。唯一不可攜帶的東西應該是DATEADD|DIFF以獲得今天的日期。

SELECT Name 
FROM (
    SELECT 
     winner as Name, 
     reported_on 
    FROM webIGames 
    UNION ALL 
    SELECT 
     loser as Name, 
     reported_on 
    FROM webIGames 
) as AllPlayers 
WHERE 
    reported_on >= DATEADD(dd, 0 + @y, DATEDIFF(dd, 0, GETDATE())) 
GROUP BY 
    Name 
HAVING 
    COUNT(*) > @x 

訣竅就是一個)同時獲得贏家和輸家(在UNION ALL),並使用HAVING限制GROUP BY後的結果。