Puedes hacer esto en SQL, aunque no es bonito.
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
Debe asegurarse de que la subconsulta n
tiene al menos el número de palabras en cada etiqueta.
Aquí es el SQLFiddle que demuestra esto.
Esta es la unión cruzada de los datos originales con números secuenciales. Luego selecciona el valor n de las cadenas de etiquetas, usando substring_index()
.
Para obtener el número máximo de etiquetas, puede hacer:
select max(length(tags) - length(replace(tags, ',', 1))+1
from t