2011-01-14 44 views
1

我正在开发一个网站,允许某个游戏的玩家上传他们的关卡并给他们加上标签。每个玩家的帐户实际上是该网站正在使用的论坛中的帐户(SMF)。MySQL,Aggregate 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 

在此先感谢。我也尝试在标签表上做第二个INNER JOIN,通过在game_tags.tag上使用常规的WHERE缩小结果,但是最后我得到了一个包含所有标签连接的单行。

回答

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的知识,试图弄清楚这一点。谢谢!这对BEYOND来说是完美的。 – Sam 2011-01-14 05:43:57