Giải pháp này dường như thực hiện được công việc (bị đánh cắp gần như nguyên văn từ trang này
). Nó yêu cầu một auxiliary
bảng, chứa đầy các số liên tiếp từ 1 đến ít nhất là số lượng các từ riêng biệt dự kiến. Điều này khá quan trọng để kiểm tra xem bảng bổ trợ có đủ lớn hay không, nếu không kết quả sẽ bị sai (không hiển thị lỗi).
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;
Cách tiếp cận này kém hiệu quả nhất có thể vì nó không thể sử dụng bất kỳ chỉ mục nào.
Để thay thế, tôi sẽ sử dụng một bảng thống kê mà tôi sẽ luôn cập nhật các trình kích hoạt. Có lẽ hãy khởi tạo bảng thống kê bằng cách trên.