我想看看最后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),您应该能够取消注释,并使两个查询都能正常工作。