Solusi ini tampaknya berhasil (dicuri hampir kata demi kata dari halaman ini
). Ini membutuhkan auxiliary
tabel, diisi dengan nomor urut dari 1 hingga setidaknya jumlah kata berbeda yang diharapkan. Ini cukup penting untuk memeriksa apakah tabel bantu cukup besar, atau hasilnya akan salah (tidak menunjukkan kesalahan).
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(maintable.comment, ' ', auxiliary.id), ' ', -1) AS word,
COUNT(*) AS frequency
FROM maintable
JOIN auxiliary ON
LENGTH(comment)>0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id), ' ', -1)
<> SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id-1), ' ', -1)
GROUP BY word
HAVING word <> ' '
ORDER BY frequency DESC;
Pendekatan ini sangat tidak efisien, karena tidak dapat menggunakan indeks apa pun.
Sebagai alternatif, saya akan menggunakan tabel statistik yang selalu saya perbarui dengan pemicu. Mungkin inisialisasi tabel statistik dengan yang di atas.