質問
私は、特定のゲームのプレイヤーがレベルをアップロードしてタグを付けることができるサイトを開発中です。実際には、各プレイヤーのアカウントは、サイトが使用しているフォーラムのアカウントです(SMF)。
特定のレベルに関連付けられたすべてのタグを問題なく返すことができます。そのサブセレクトの結果について一致するものをフィルタリングしたいときに問題に遭遇します。列「タグリスト」が存在しないと主張しています...
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番目の内側結合を実行してみました。 game_tags.tag
, 、しかし、私はすべてのタグを連結した単一の行になります。
解決
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
所属していません StackOverflow