SQL: подстрока триггера в строке?

У меня есть таблица на SQL с нецензурными словами и его идентификаторами, а также таблица со свойствами фотографий галереи. Я хочу сделать триггер, который не позволит вам вставить фотографию с плохими словами в photo.title и в photo.description. Как я могу это сделать??

CREATE TABLE Photos ( photoId INT NOT NULL PRIMARY KEY AUTO_INCREMENT, title VARCHAR(128) NOT NULL, description VARCHAR(512), date DATETIME DEFAULT CURRENT_TIMESTAMP, url VARCHAR(512) NOT NULL, visibility VARCHAR(16) NOT NULL, userId INT, FOREIGN KEY (userId) REFERENCES users(userId), CONSTRAINT ValidVisibility CHECK (visibility in ('Public', 'Private')) ); 
CREATE TABLE BadWords ( wordId INT NOT NULL PRIMARY KEY AUTO_INCREMENT, word VARCHAR(100) NOT NULL );
Источник
  • 0
    пожалуйста, добавьте образец ваших таблиц, и каковы критерии «плохих слов»?
  • 0
    Идея - фильтр, который не позволяет помещать оскорбления в заголовок и описание фотографии. Мои таблицы: CREATE TABLE Photos (photoId INT NOT NULL PRIMARY KEY AUTO_INCREMENT, заголовок VARCHAR (128) NOT NULL, описание VARCHAR (512), дата DATETIME DEFAULT CURRENT_TIMESTAMP, url VARCHAR (512) NOT NULL, видимость VARCHAR (16) NOT NULL , userId INT, FOREIGN KEY (userId) ССЫЛКИ на пользователей (userId), CONSTRAINT ValidVisibility CHECK (видимость в ('Public', 'Private'))); СОЗДАТЬ ТАБЛИЦУ недопустимых слов (wordId INT NOT NULL PRIMARY KEY AUTO_INCREMENT, слово VARCHAR (100) NOT NULL);
  • 0
    пожалуйста, опубликуйте детали вопроса (например, определение таблицы), отредактировав свой вопрос, а не как комментарий
Codelisting
за 1 против
Лучший ответ

РЕДАКТИРОВАТЬ: создать триггер при вставке, который будет делать этот выбор:

 SELECT * FROM Photos, BadWords 
  
 WHERE  Photos.title LIKE CONCAT('%', BadWords.word ,'%') OR

        Photos.description LIKE CONCAT('%', BadWords.word ,'%')

и удалите все результаты. (выбор проверяет, содержит ли заголовок или описание значение из столбца BadWords.word)

  • 0
    Прямо сейчас я попробовал это, и это работает, когда слово изолировано: DELIMITER // СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ТРИГГЕР triggerBadWords ПЕРЕД ВСТАВКОЙ НА фото ДЛЯ КАЖДОЙ СТРОКИ НАЧАТЬ DECLARE photoswithbadwords INT; УСТАНОВИТЬ photoswithbadwords = (ВЫБРАТЬ СЧЕТЧИК (*) ИЗ НЕВЕРНЫХ СЛОВ ГДЕ (новое.название КАК Плохие слова.слово) ИЛИ (новое.описание КАК Плохие слова.слово)); if (photoswithbadwords> 0) then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '¡Modera tu lenguaje amigo!'; КОНЕЦ если; КОНЕЦ // РАЗДЕЛИТЕЛЬ; Я пробовал использовать «%», например: «LIKE BadWords.word + '%'», но получил эту ошибку: «Усечено неправильное значение DOUBLE: '%'»
  • 0
    попробуйте добавить это так: Photos.title LIKE '%' + BadWords.word + '%' OR Photos.description LIKE '%' + BadWords.word + '%'
  • 0
    Та же ошибка: усеченное неправильное значение DOUBLE: '%'
  • 0
    попробуйте отключить strict mode
  • 0
    какую БД вы используете?
  • 0
    то же самое ... :(, нет другого способа представить любой символ без использования '%'?
  • 0
    Я использую heidisql
  • 0
    heidisql - это клиентское программное обеспечение, какой у вас сервер БД?
  • 0
    Хорошо, надеюсь, это поможет - sqlfiddle.com/#!9/93d0e/5 Я также отредактировал ответ
  • 0
    Ты сделал это!!! Спасибо чувак!!!!! : DDD
  • 0
    пожалуйста, нажмите на мой ответ, спасибо
Codelisting
Популярные категории
На заметку программисту