Проверьте, соответствует ли какая-либо часть string1 какой-либо части string2

У меня есть простая функция поиска, которая использует

WHERE data LIKE '%keyWord%';

но что делать, если я использую много ключевых слов

«многие ключевые слова»

и мои данные содержат

«некоторые ключевые данные»

Я хочу, чтобы они совпадали, даже если одно слово совпадает («ключ» в этом случае).
Может ли это быть достигнуто в одном запросе MySQL?

2 ответа

  1. Хорошо, вот как я с этим справился.

                $keyWords = $_POST["searchedWords"];
                $exploded = explode(" ",$keyWords);
                $allTags = '';
                foreach ($exploded as $tag) {
                    $allTags .= " or data like '%".$tag."%'";
                }
    
                $query = "select something, something2 from myTable
                where data = 'ReallyHardTagThatNoOneWillGuess'$allTags";
    

    Это дает запрос, готовый для поиска таблицы с каждым словом в строке, а не только строку в целом.

  2. Если таблица не содержит несколько строк, таких как» %text%», следует избегать, так как индекс не может использоваться.

    Вместо этого следует добавить полнотекстовый индекс к данным столбца и выполнить полнотекстовый поиск, например

    ALTER TABLE mytable ADD FULLTEXT(data);
    SELECT col1, col2, ... FROM mytable WHERE match(data) AGAINST("word1 word2 word3" in BOOLEAN MODE);