Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

खराब शब्द फ़िल्टर बिना php के MYSQL में मूल रूप से लिखा गया है

मैं इसे एक नए उत्तर के रूप में पोस्ट कर रहा हूं, क्योंकि मैं यहां एक अलग तकनीक का उपयोग कर रहा हूं। मैं सोच रहा हूं कि हम केवल एक 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)

केस सेंसिटिव होगा। आप चाहें तो इसे आसानी से ठीक किया जा सकता है। कृपया एक बेला देखें यहां



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL कनेक्शन के साथ Nodejs क्लस्टर

  2. MySQL को अपडेट करना प्रभावित पंक्तियों को लौटाता है, लेकिन वास्तव में डेटाबेस को अपडेट नहीं करता है

  3. जॉइन में उच्चतम परिणाम प्राप्त करना

  4. MySQL तालिका के विशिष्ट रिकॉर्ड अपडेट करें

  5. गति:MySQL बनाम फ़ाइल आउटपुट