2013-08-04 60 views
1

我正在查看最後3行是否有相同的用戶ID ... 我已經嘗試過計數,選擇​​不同而沒有運氣。有任何想法嗎?最後3行具有相同的用戶標識嗎?

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']; 
+0

您需要在bindParam之前設置您的參數值變量 – DevZer0

回答

1

您需要一個嵌套查詢。試想一下,這樣的查詢:

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不支持子查詢中的LIMIT子句和IN運算符。

子查詢的另一種形式是與MySQL的工作是這樣的:

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

的SQL小提琴,同時顯示的查詢可以在這裏看到:http://sqlfiddle.com/#!2/dda29/4

我已經將第一個查詢的LIMIT部分註釋掉了,所以它將在MySQL中起作用。如果您將數據庫引擎更改爲其他內容(例如PostgreSQL),則應該取消註釋並使兩個查詢都正常工作。

相關問題