2014-02-26 3 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 0 - 알 수없는 열 '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'가 수행되어야합니다. – zerkms

+0

@zerkms 우수 포인트. 왜 내 인덱스를 사용하지 않는지에 대한 의구심을 제거했습니다! –

+0

@zerkms 감사합니다. 관심을 기울이지 않았고 답변을 업데이트했습니다. – CodeBird

-1

당신은 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' 이후에 ** PS : 그것은 – zerkms

+0

에있는 'cPlayers'의 사용으로 인해 실행되지 않습니다. 조건이 HAVING 절에 있다면 작동할까요? 좋아요 : d.players> cPlayers –

+0

그럼 작동 하겠지만, 여전히'group by'과'where' 명령은'd.id'에 – zerkms

관련 문제