Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

bộ lọc từ xấu được viết bằng MYSQL mà không có php

Tôi đăng nó như một câu trả lời mới, vì tôi đang sử dụng một kỹ thuật khác ở đây. Tôi nghĩ chúng ta chỉ có thể sử dụng một hàm MySQL và một kích hoạt CHÈN TRƯỚC. Hàm tách chuỗi được lấy từ câu trả lời khác này .

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

và trình kích hoạt INSERT sẽ giống như sau:

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

điều này sẽ nhanh hơn, vì câu sẽ chỉ được chuyển đổi một lần, khi bạn chèn nó vào cơ sở dữ liệu. Vẫn có một số cải tiến mà chúng tôi cần, giống như trước đây:

LEFT JOIN words w ON s.split = w.bad

nó sẽ không khớp với các từ chứa dấu phân cách,. ! ? và chức năng thay thế

REPLACE(split, COALESCE(bad, ''), good)

sẽ phân biệt chữ hoa chữ thường. Nó có thể được cố định qute một cách dễ dàng nếu bạn muốn. Vui lòng xem fiddle tại đây .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể tìm thấy trình điều khiển jdbc?

  2. MYSQL bên trong Tham gia hai bảng trên hai khóa

  3. Laravel thuộc về lỗi không xác định

  4. Giá trị tự động tăng của MySQL tăng ngay cả khi chèn không thành công do lỗi

  5. MYSQL Cách sử dụng trim trong truy vấn chọn