PHP / MySQL. Существует ли функция mysql для определения того, существует ли хотя бы 2 определенных слова по меньшей мере в одном поле строки mysql

Например, у меня есть php-массив $php_arr_to_check = array("green", "red", "blue");

И так много строк mysql, как это

 Id | TextToCheckIn ______________________ 1 | green brown blue 2 | black yellow white red 3 | yellow green black red grey white 

Хотелось бы, чтобы петля $php_arr_to_check через каждую строку в столбце TextToCheckIn и возвращала Id где, например, в $php_arr_to_check существует, по крайней мере, 2 слова из $php_arr_to_check TextToCheckIn .

Является ли это возможным? Существует ли какая-либо функция mysql?

Вот пример с php (что я хочу получить)

 $php_arr_to_check = array("green", "red", "blue"); echo '<pre>', print_r($php_arr_to_check, true), '</pre> php_arr_to_check <br/>'; $mysql_rows = array( array("green", "brown", "blue"), array("black", "yellow", "white", "red"), array("yellow", "green", "black", "red", "grey", "white") ); echo '<pre>', print_r($mysql_rows, true), '</pre> mysql_rows <br/>'; foreach( $mysql_rows as $one_row ){ //echo count(array_intersect($php_arr_to_check, $one_row)). ' count array_intersect __ <br/>'; if( count(array_intersect($php_arr_to_check, $one_row)) > 1 ){ $arr_with_count_matches[] = count(array_intersect($php_arr_to_check, $one_row)); $maches_exist = true; } } echo '<pre>', print_r($arr_with_count_matches, true), '</pre> arr_with_count_matches <br/>'; 

Хотите получить тот же результат, сравнивающий php-массив с столбцом mysql.

Любые идеи, как это сделать (без LIKE )? Может быть, с MATCH AGAINST каким-то образом?

Прежде чем я использовал ниже, но получил как бы ложные срабатывания ….

 SELECT Id FROM table WHERE MATCH (TextToCheckIn) AGAINST (?) LIMIT 1 

Попытаюсь

 SELECT Id FROM table WHERE MATCH (SUBSTRING_INDEX(TextToCheckIn, ' ', 3)) AGAINST (?) LIMIT 1 

Как понимаю, я TextToCheckIn первые 3 слова в TextToCheckIn с php-массивом. Но не понимаю, что я получу. Чтение здесь http://www3.physnet.uni-hamburg.de/physnet/mysql/manual_Fulltext_Search.html

Для каждой строки таблицы возвращается релевантность – мера подобия между текстом в этой строке (в столбцах, которые являются частью коллекции) и запросом.

Кажется, это именно то, что необходимо … нужно проверить

Related of "PHP / MySQL. Существует ли функция mysql для определения того, существует ли хотя бы 2 определенных слова по меньшей мере в одном поле строки mysql"

Я думаю, вы хотите использовать Boolean Full-Text Search

Если вы играете без операторов + - против green red blue все строки возвращаются, где в записи содержится хотя бы одно слово: green или red или blue .

IN BOOLEAN MODE и без операторов каждое совпадающее слово забьет 1 . Поэтому, если есть запись, соответствующая двум из трех слов, она набрала бы 2 .

Чтобы получить строки, имеющие как минимум 2 балла:

 SELECT *, MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE) `score` FROM `my_tab` WHERE MATCH (`TextToCheckIn`) AGAINST ('green red blue' IN BOOLEAN MODE) HAVING `score` >= 2 ORDER BY `score` DESC 

В режиме естественного языка скоринг работает совершенно по-другому. Думайте, что это в первую очередь основано на BM25 .


В больших наборах данных логический полнотекстовый поиск (с использованием полнотекстового индекса ) обычно превосходит REGEXP или LIKE , если сопоставить слова где-то в тексте. Используется только как / regexp для сопоставления с исходным, например REGEXP '^word' или LIKE 'word%' – если индекс может быть использован.

У меня нет MySQL для проверки следующего запроса. Вы попробуете что-нибудь:

 SELECT Id, TextToCheckIn REGEXP "(${word1})|(${word2})" AS Flag FROM table WHERE Flag = 1