Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySql récupère la liste des mots uniques de la table où les valeurs d'un champ sont séparées par une virgule

Vous pouvez le faire en SQL, même si ce n'est pas joli.

select distinct reverse(substring_index(reverse(substring_index(tags, ',', n.n)), ',', 1)) as word
from t cross join
     (select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n
having word is not null

Vous devez être sûr que la sous-requête n a au moins le nombre de mots dans chaque balises.

Ici est le SQLFiddle qui le démontre.

Il s'agit d'une jonction croisée des données d'origine avec des numéros séquentiels. Il sélectionne ensuite la nième valeur des chaînes de balises, en utilisant substring_index() .

Pour obtenir le maximum de tags, vous pouvez faire :

select max(length(tags) - length(replace(tags, ',', 1))+1
from t