我正在开发一个网站,允许某个游戏的玩家上传他们的关卡并对其进行标记。每个玩家的帐户实际上是该网站使用的论坛(SMF)中的帐户。
我能够返回与特定级别相关的所有标签没有问题;当我想过滤那些匹配该子选择结果的问题时,我遇到了一个问题。它声称专栏'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来缩小结果,但最后我得到了一个连接了所有标签的行。
答案 0 :(得分: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