sql >> Database teknologi >  >> RDS >> Mysql

mysql-forespørgsel for at matche sætning mod søgeord i et felt

En måde at gøre det på kunne være at konvertere apple, oranges, pears til apple|oranges|pears og brug RLIKE (dvs. regulært udtryk) for at matche det.

For eksempel matcher "John kunne lide at spise æbler" det regulære udtryk "æble|appelsin|pærer".

For at konvertere 'æble, appelsiner, pærer' til regex-formen skal du først erstatte alle ', ' med '|' ved hjælp af REPLACE . Brug derefter RLIKE for at vælge de søgeordsposter, der matcher:

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

Dette afhænger dog af, at din kommaadskillelse er konsistent (dvs. hvis der er én række, der ligner apples,oranges dette vil ikke fungere som REPLACE erstatter et komma efterfulgt af et mellemrum (i henhold til dine eksempelrækker).

Jeg tror heller ikke, det vil opskalere særlig godt.

Og hvis du har en sætning som 'John kunne lide at spise ananas', ville den matche begge rækker ovenfor (da den har 'æble' i sig). Du kan derefter prøve at tilføje ordgrænser til det regex (dvs. WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]' ), men dette ville ødelægge matchningen, når du har flertal ('æbler' ville ikke matche '[ordgrænse]æble[ordgrænse]').



  1. SCD Type 6

  2. Mysql range check i stedet for indeksbrug på indre join

  3. mysql eksport sql dump alfabetisk, hvilket forårsager fejl med fremmednøglebegrænsninger under import

  4. MySql 8.0.15 installationsfejl Ugyldig serverskabelon