Можете да направите това в SQL, въпреки че не е красиво.
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
Трябва да сте сигурни, че подзаявката n
има поне броя на думите във всеки етикет.
Тук е SQLFiddle, който демонстрира това.
Това е кръстосано свързване на оригиналните данни с последователни номера. След това избира n-тата стойност от низовете на етикетите, използвайки substring_index()
.
За да получите максимален брой тагове, можете да направите:
select max(length(tags) - length(replace(tags, ',', 1))+1
from t