2011-01-14 13 views
1

私は特定のゲームのプレイヤーが自分のレベルをアップロードしてタグ付けできるサイトを開発中です。各プレイヤーのアカウントは実際にサイトが使用しているフォーラム(SMF)のアカウントです。MySQL、Aggregate SubSelect問題

特定のレベルに関連するすべてのタグを問題なく返すことができます。その副選択の結果に一致するものをフィルタリングしたいときに問題にぶつかります。列 'タグリスト'が存在しないと主張しています...

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を使用して結果を絞り込んでタグテーブルの2番目のINNER JOINを実行しようとしましたが、すべてのタグが連結された1つの行で終了します。

答えて

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分間にオンラインで見つけたこの1つのクエリでMySQLについて詳しく教えてくれたと思います。ありがとうございました!これは私のために完璧です。 – Sam