@Andre548

Как найти совпадения в бд?

Есть база со стоп словами. Я получаю комментарии на сайте, как можно сверить комментарий со стоп словами? То есть, если в комментарии присутствует одно из слов, отловить его. Я пробовал через where
SpamWord::where('word', $text)->first();
Это работает только при точном совпадении.
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
Fernus
@Fernus
Техник - Механик :)
<?php

$isStop = SpamWord::whereRaw("? RLIKE CONCAT('[[:<:]]', `word`, '[[:>:]]')", [$text])->exists();

if($isStop) {

    // Есть плохое слово

}


P.S.: Ниже правильно советуют...собрать все слова в "шаблоны" и не дёргать БД каждый раз...
А касаемо вопроса - должно работать и так :)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
В базе со стоп-словами должны быть не слова, а маски, где, например, звездочками обозначается, что сверяется только начало слова. В примитиве - скачиваете весь список, превращая маски в регулярки (например, заменяя * на .*) и объединив их в одно общее выражение, делаете preg_match.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
25 апр. 2024, в 14:44
10000 руб./за проект
25 апр. 2024, в 14:44
250 руб./в час