2011-01-14 38 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