2011-01-14 2 views
1

특정 게임 플레이어가 자신의 레벨을 업로드하고 태그 할 수있는 사이트를 개발 중입니다. 각 플레이어의 계정은 실제로 사이트에서 사용중인 포럼 (SMF)의 계정입니다.MySQL, Aggregate SubSelect 문제

특정 레벨과 관련된 모든 태그를 반환 할 수 있습니다. 해당 subselect의 결과에 일치하는 것을 필터링하려고 할 때 문제가 발생합니다. 열 'taglist'가 존재하지 않는다고 주장합니다 ...

SELECT smf_members.realName,game_levels.*, 
     (SELECT GROUP_CONCAT(tag) 
      FROM `game_tags` 
     WHERE `game_tags`.uuid = `game_levels`.uuid) AS taglist  
    FROM `game_levels` 
INNER JOIN `smf_members` ON `smf_members`.ID_MEMBER = `game_levels`.ID_MEMBER  
WHERE taglist LIKE 'untagged'  
ORDER BY `ID_TOPIC` DESC 

미리 감사드립니다. 나는 또한 game_tags.tag에 일반 WHERE를 사용하여 결과를 좁히고 태그 테이블에서 두 번째 INNER JOIN을 시도했지만 모든 태그가 연결되어있는 단일 행으로 끝납니다.

답변

2

WHERE 절에서 열 별칭을 참조 할 수 없습니다. 가장 오래된 MySQL 지원 열 별칭 참조는 GROUP BY입니다. 사용 :

SELECT sm.realName, 
     gl.*, 
     x.taglist 
    FROM GAME_LEVELS gl 
    JOIN SMF_MEMBERS sm ON sm.id_member = gl.id_member 
    JOIN (SELECT gt.uuid, 
       GROUP_CONCAT(gt.tag) AS taglist 
      FROM GAME_TAGS gt 
     GROUP BY gt.uuid) x ON x.uuid = gl.uuid 
    WHERE x.taglist LIKE 'untagged'  
ORDER BY ID_TOPIC DESC 
+0

지난 30 분 동안 온라인에서 찾은 하나의 쿼리에서 MySQL에 대해 자세히 알려 주셨습니다. 고맙습니다! 이것은 나를 위해 완벽합니다. – Sam