मैं इसे एक नए उत्तर के रूप में पोस्ट कर रहा हूं, क्योंकि मैं यहां एक अलग तकनीक का उपयोग कर रहा हूं। मैं सोच रहा हूं कि हम केवल एक MySQL फ़ंक्शन और INSERT ट्रिगर से पहले का उपयोग कर सकते हैं। स्ट्रिंग को विभाजित करने का कार्य इस अन्य उत्तर से लिया गया है। ।
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
और INSERT ट्रिगर इस तरह होगा:
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
यह तेज़ होगा, क्योंकि जब आप इसे डेटाबेस में डालते हैं तो वाक्य केवल एक बार परिवर्तित हो जाएगा। अभी भी कुछ सुधार हैं जिनकी हमें पहले की तरह ही आवश्यकता है:
LEFT JOIN words w ON s.split = w.bad
यह विभाजक , वाले शब्दों से मेल नहीं खाएगा। ! ? और बदलें फ़ंक्शन
REPLACE(split, COALESCE(bad, ''), good)
केस सेंसिटिव होगा। आप चाहें तो इसे आसानी से ठीक किया जा सकता है। कृपया एक बेला देखें यहां ।