2014-02-26 60 views
0

我正在構建一個遊戲的事情,我目前正在研究匹配的玩家機制,但我得到這個錯誤,我不能確定數字。我有兩張牌games,其中包含關於遊戲的不同實例的信息以及在每場比賽中持有玩家的信息players。現在,當新玩家加入比賽隊列時,我想選擇所有目前尚未開始的比賽,並將他們(玩家)添加到各自的比賽中。我如何認識未開始的比賽是由其中的選手數量決定的。如果一款遊戲適合2名玩家,那麼任何1名玩家的遊戲尚未開始。這是我的查詢Mysql無效使用Count功能的羣組功能?

SELECT * // * for saving time in testing 
FROM games d LEFT JOIN players dp ON d.id = dp.gameId 
WHERE d.players > COUNT(dp.playerId) LIMIT 1 

,但我得到這個惱人的錯誤

1111 - 無效使用組功能的

我試圖像這樣

SELECT *, COUNT(dp.playerId) AS cPlayers 
FROM games d LEFT JOIN players dp ON d.id = dp.gameId 
WHERE d.players > cPlayers LIMIT 1 

但隨後我得到

1054 - 中未知列'cPlayers 'where子句'

+0

爲什麼堅持恢復格式編輯? – Raptor

回答

2

我想這應該工作。

SELECT * 
FROM games d LEFT JOIN players dp ON d.id = dp.gameId 
GROUP BY d.id 
HAVING d.players > COUNT(dp.playerId) LIMIT 1 
+0

'GROUP BY'應該在'd.id'上執行 – zerkms

+0

@zerkms好的一點。刪除了我爲什麼不使用我的索引的懷疑! –

+0

@zerkms謝謝,沒有注意,更新了答案 – CodeBird

-1

你應該對字段使用GROUP BY使用聚合功能,如COUNT(dp.playerId)。

試試這個

SELECT COUNT(dp.playerId) AS cPlayers 
FROM games d LEFT JOIN players dp ON d.id = dp.gameId group by dp.playerId 
WHERE d.players > cPlayers LIMIT 1 
+0

'GROUP BY'在**'WHERE'後面** **:因爲使用'cPlayers'而不會運行,其中 – zerkms

+0

如果將條件放在HAVING子句中,它將會起作用。喜歡:HAVING d.players> cPlayers –

+0

然後它會起作用,但是你仍然有錯誤的'group by'&'where'命令 – zerkms