Bạn có thể làm điều này trong SQL, mặc dù nó không đẹp.
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
Bạn cần chắc chắn rằng truy vấn con n
có ít nhất số từ trong mỗi thẻ.
Tại đây là SQLFiddle chứng minh điều này.
Đây là kết hợp chéo dữ liệu ban đầu với các số tuần tự. Sau đó, nó chọn ra giá trị thứ n từ các chuỗi thẻ, sử dụng substring_index()
.
Để nhận được số lượng thẻ tối đa, bạn có thể thực hiện:
select max(length(tags) - length(replace(tags, ',', 1))+1
from t