1

特定のゲームのプレイヤーが自分のレベルをアップロードしてタグ付けできるようにするサイトを開発中です。各プレイヤーのアカウントは、実際にはサイトが使用しているフォーラム (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

前もって感謝します。また、タグ テーブルで 2 番目の INNER JOIN を実行して、通常の WHERE on を使用して結果を絞り込もうとしましたgame_tags.tagが、すべてのタグが連結された単一の行になってしまいます。

4

1 に答える 1

1

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
于 2011-01-14T05:39:03.140 に答える