最后3行是否具有相同的用户id


Does Last 3 rows have the same user id?

我想看看最后3行是否有相同的userId。。。我尝试过计数,但没有运气。有什么想法吗?

id   userId  gameId switchId won
--------------------------------
1     1515     5       475    0
2     1515     5       475    0
3     1515     5       475    0
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
$st = $db->prepare("SELECT COUNT(userId) AS total FROM arcadeGamesInPlay WHERE userId=:userid,gameId=:gameId AND switchId=:switchId AND won=:won ORDER by id DESC LIMIT :limit"); // need to filter for next auction
$st->bindParam(':userId', $userId);
$st->bindParam(':gameId', $gameId);
$st->bindParam(':switchId', $switchId);
$st->bindParam(':won', $won);
$st->bindParam(':limit', $limit);
$limit=3;
$won=0;
$st->execute();
$r = $st->fetch(PDO::FETCH_ASSOC);
$playedLastThreeGames= $r['total'];

为此需要一个嵌套查询。想象一下这样的查询:

SELECT COUNT(DISTINCT userId) FROM arcadeGamesInPlay WHERE id IN (1, 2, 3);

这将返回在列出的三行中找到的唯一用户ID的数量——如果它返回1,那么您就知道它们都是一样的。

您可以将其与查询相结合,以选择最后三行。也许是这样的:

SELECT id FROM arcadeGamesInPlay ORDER BY id DESC LIMIT 3

尽管您可能也想添加WHERE子句。

总之,您的查询如下所示:

SELECT COUNT(DISTINCT userId)
FROM arcadeGamesInPlay
WHERE id IN (
    SELECT id
    FROM arcadeGamesInPlay
    ORDER BY id DESC
    LIMIT 3
);

话虽如此,您还没有指定实际连接到的数据库——如果是MySQL,您就会遇到问题,因为MySQL不支持使用IN运算符的子查询上的LIMIT子句。

与MySQL一起使用的子查询的另一种形式如下:

SELECT COUNT(DISTINCT userId)
FROM (
    SELECT userId
    FROM arcadeGamesInPlay
    ORDER BY id DESC
    LIMIT 3
) u;

显示这两个查询的SQL Fiddle可以在这里看到:http://sqlfiddle.com/#!2/dda29/4

我已经注释掉了第一个查询的LIMIT部分,所以它将在MySQL中工作。如果您将数据库引擎更改为其他引擎(例如PostgreSQL),您应该能够取消注释,并使两个查询都能正常工作。