sql >> Databáze >  >> RDS >> Mysql

mysql dotaz pro shodu věty s klíčovými slovy v poli

Jedním ze způsobů, jak to udělat, může být převod apple, oranges, pears na apple|oranges|pears a použijte RLIKE (tj. regulární výraz), aby se s ním shodoval.

Například 'John rád jedl jablka' odpovídá regulárnímu výrazu 'jablko|pomeranč|hrušky'.

Nejprve, chcete-li převést 'jablko, pomeranče, hrušky' do regulárního výrazu, nahraďte všechny ', ' za '|' pomocí REPLACE . Poté použijte RLIKE vyberte položky klíčových slov, které se shodují:

SELECT * 
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');

To však závisí na tom, zda je vaše oddělení čárkou konzistentní (tj. pokud existuje jeden řádek, který vypadá jako apples,oranges toto nebude fungovat jako REPLACE nahradí čárku následovanou mezerou (jak je uvedeno v řádcích vašeho příkladu).

Také si nemyslím, že se to moc dobře rozšíří.

A pokud máte větu jako „John rád jedl ananas“, odpovídala by oběma řádkům výše (protože obsahuje „jablko“). Pak byste mohli zkusit přidat hranice slov do regulárního výrazu (tj. WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]' ), ale to by pokazilo párování, když máte množná čísla ('apples' by se neshodovalo s '[wordboundary]apple[wordboundy]').



  1. Jaký je rozdíl mezi pls_integer a binary_integer?

  2. Jak definovat vlastní objednávku v klauzuli ORDER BY?

  3. MySQL Levenshtein

  4. auxService:mapreduce_shuffle neexistuje