MySQL, Aggregate subselect Problem
-
11-10-2019 - |
Frage
Ich bin im Begriff, eine Website zu entwickeln, dass die Spieler von einem bestimmten Spiel ermöglicht, ihre Ebene und Tag um sie zu laden. Jedes Spielerkonto ist eigentlich ein Konto in den Foren, dass die Website verwendet (SMF).
Ich bin in der Lage, alle Tags mit einer bestimmten Ebene keine Probleme zurückzukehren; Ich laufe in ein Problem, wenn ich diese Anpassung auf dem Ergebnis dieser subselect filtern möge. Sie behauptet, die Spalte ‚taglist‘ existiert nicht ...
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
Vielen Dank im Voraus. Ich habe auch eine zweite INNER JOIN auf der Tags-Tabelle versucht zu tun, die Ergebnisse Verengung durch eine regelmäßige WHERE auf game_tags.tag
, aber dann habe ich mit einer einzigen Reihe am Ende, dass alle Tags verketteten hat.
Lösung
Sie können keine Spalte Alias ??in der WHERE-Klausel verweisen - die früheste MySQL unterstützt Spalte alias Referenzierung der GROUP BY
ist. Verwendung:
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