问:我如何仅使MySQL选择所有已玩过的用户=> x最近几天在中的游戏数量?
这全部用于游戏阶梯。我使用两个表:weblPlayers只有用户信息(用户名,电子邮件,密码等),weblGames包含每个报告游戏的结果以及报告时的日期和时间,格式正确。
以下是它们的屏幕截图:
WeblPlayers的字段为:player_id |名字|电子邮件|等|报告游戏时,weblGames中获胜者或输家的名称与WeblPlayers中的相同名称相对应。
答案 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
之后的结果。