Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

filter kata buruk ditulis asli dalam MYSQL tanpa php

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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa kueri UNION sangat lambat di MySQL?

  2. Bagaimana cara memasukkan output json ke mysql dengan node js

  3. Bagaimana cara menyimpan banyak nilai dalam satu kolom di mana menggunakan lebih sedikit memori?

  4. Saya tidak dapat menemukan apakah baris sudah ada di mysql db menggunakan fungsi waktu di php mysql query?

  5. Cara Mengambil catatan berdasarkan Tanggal di MYSQL