sql >> Database >  >> RDS >> Mysql

mysql-query om zin te matchen met trefwoorden in een veld

Een manier om dit te doen zou kunnen zijn om apple, oranges, pears te converteren naar apple|oranges|pears en gebruik RLIKE (dwz reguliere expressie) om ermee te matchen.

'John at bijvoorbeeld graag appels' komt bijvoorbeeld overeen met de regex 'appel|orange|peren'.

Om 'appel, peren, peren' om te zetten naar de regex-vorm, vervang eerst alle ', ' door '|' met behulp van REPLACE . Gebruik dan RLIKE om de trefwoorden te selecteren die overeenkomen:

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

Dit hangt er echter van af of uw kommascheiding consistent is (d.w.z. als er één rij is die eruitziet als apples,oranges dit werkt niet als de REPLACE vervangt een komma gevolgd door een spatie (volgens uw voorbeeldrijen).

Ik denk ook niet dat het goed zal opschalen.

En als je een zin hebt als 'Jan vond het leuk om ananas te eten', zou deze overeenkomen met beide bovenstaande rijen (omdat er 'appel' in staat). Je zou dan kunnen proberen om woordgrenzen aan de regex toe te voegen (bijv. WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]' ), maar dit zou het matchen verpesten als je meervoudsvormen hebt ('appels' zouden niet overeenkomen met '[wordboundary]apple[wordboundary]').



  1. Maak een functie met optionele argumenten in MySQL

  2. Kloon ORACLE_HOME

  3. Verkrijg de maximaal toegestane lengte in de kolom, mysql

  4. Hoe maak je een MySQL hiërarchische recursieve query?