Saya mempostingnya sebagai jawaban baru, karena saya menggunakan teknik yang berbeda di sini. Saya pikir kita bisa menggunakan fungsi MySQL dan pemicu BEFORE INSERT. Fungsi untuk memisahkan string diambil dari jawaban lain ini .
CREATE FUNCTION strSplit(x VARCHAR(1000), delim VARCHAR(12), pos INTEGER)
RETURNS VARCHAR(1000)
BEGIN
DECLARE output VARCHAR(1000);
SET output = REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos)
, CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1)
, delim
, '');
IF output = '' THEN SET output = null; END IF;
RETURN output;
END
dan pemicu INSERT akan seperti ini:
CREATE TRIGGER change_words
BEFORE INSERT ON sentences
FOR EACH ROW
BEGIN
DECLARE i INT;
DECLARE s VARCHAR(1000);
DECLARE r VARCHAR(1000);
SET i = 1;
SET s = '';
REPEAT
SET s = (
SELECT
REPLACE(split, COALESCE(bad, ''), good)
FROM
(SELECT strSplit(new.sentence, ' ', i) AS split) s
LEFT JOIN words w ON s.split = w.bad
LIMIT 1
);
SET r = CONCAT_WS(' ', r, s);
SET i = i + 1;
UNTIL s IS NULL
END REPEAT;
SET new.sentence = r;
END
ini akan lebih cepat, karena kalimat akan dikonversi hanya sekali, ketika Anda memasukkannya ke dalam database. Masih ada beberapa perbaikan yang kami butuhkan, sama seperti sebelumnya:
LEFT JOIN words w ON s.split = w.bad
itu tidak akan cocok dengan kata-kata yang mengandung separator , . ! ? dan fungsi ganti
REPLACE(split, COALESCE(bad, ''), good)
akan peka huruf besar/kecil. Itu dapat diperbaiki dengan cukup mudah jika Anda mau. Silakan lihat biola di sini .