Domanda

Sono nel processo di sviluppo di un sito che permetterà ai giocatori di un certo gioco di caricare i propri livelli e tag. conto di ogni giocatore è in realtà un conto nei forum che il sito sta usando (SMF).

Sono in grado di restituire tutti i tag associati a un particolare livello senza problemi; Mi imbatto in un problema quando voglio filtrare quelli corrispondente sul risultato di quella sub-SELECT. Essa sostiene la colonna 'taglist' non esiste ...

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

Grazie in anticipo. Ho anche provato a fare un secondo INNER JOIN sul tavolo tag, restringendo i risultati utilizzando un normale dove il game_tags.tag, ma poi ho finire con una sola riga che ha tutti i tag concatenate.

È stato utile?

Soluzione

Non si può fare riferimento a un alias di colonna nella clausola WHERE - il primo supporto MySQL colonna alias riferimento è il GROUP BY. Usa:

  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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top