SQL仅选择最近几天玩过x个游戏的玩家?

时间:2009-08-06 00:34:45

标签: sql mysql

问:我如何仅使MySQL选择所有已玩过的用户=> x最近几天中的游戏数量?

这全部用于游戏阶梯。我使用两个表:weblPlayers只有用户信息(用户名,电子邮件,密码等),weblGames包含每个报告游戏的结果以及报告时的日期和时间,格式正确。

以下是它们的屏幕截图:

weblGames

WeblPlayers的字段为:player_id |名字|电子邮件|等|报告游戏时,weblGames中获胜者或输家的名称与WeblPlayers中的相同名称相对应。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

诀窍是a)同时获得胜利者和失败者(UNION ALL),并使用HAVING限制GROUP BY之后的结果。