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