sql >> Databasteknik >  >> RDS >> Mysql

Hur man söker i en SQL-tabell efter en fras

Felstavningsproblemet är svårt, för att inte säga omöjligt, att lösa bra i ren MySQL.

Flerkolumnen FULLTEXT sökning är inte så illa.

Din fråga kommer att se ut ungefär så här ...

 SELECT column, column
   FROM table
  WHERE MATCH(Company, FirstName, LastName, whatever, whatever) 
      AGAINST('search terms' IN NATURAL LANGUAGE MODE)

Det kommer att producera ett gäng resultat, sorterade efter vad MySQL gissar är den mest troliga träffen först. MySQL:s gissningar är inte bra, men de är vanligtvis tillräckliga.

Du behöver en FULLTEXT index som matchar listan med kolumner i din MATCH() klausul. Att skapa det indexet ser ut så här.

ALTER TABLE book 
ADD FULLTEXT INDEX Fulltext_search_index_1 
    (Company, FirstName, LastName, whatever, whatever);

Trots kommentarerna i din fråga behöver du bara ett index för den grupp av kolumner som du ska söka efter.

20 000 rader kommer inte att vara en stor börda för någon serverhårdvara av den senaste tiden.

Felstavning:Du kan prova SOUNDEX() , men det är en algoritm från tidigt 1900-tal designad av Bell System för att slå upp folks namn på amerikansk engelska. Den är designad för att få många falska positiva träffar, och den är verkligen dummare än en hink med stenar.

Om du verkligen behöver stavningskorrigering kan du behöva undersöka Sphinx.




  1. Använder Jquery Ajax för att hämta data från Mysql

  2. Hur pg_sleep_until() fungerar i PostgreSQL

  3. Fix Msg 241 "Konvertering misslyckades vid konvertering av datum och/eller tid från teckensträng" i SQL Server

  4. CX_Oracle - importera data från Oracle till Pandas dataram