Dette er ikke et simpelt spørgsmål. Dit bedste bud er at bruge en eller anden form for fuldtekstsøgning . Fuldtekstsøgning kan konfigureres til at have stopord (ord, der er udeladt fra søgning - som ordet the
) og kan også have en minimumsgrænse for ordlængde (ord med mindre end visse tegn lange udelades også fra søgningen.
Men hvis du blot bruger
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');
Så returnerer MySQL ikke kun posten med den værdi, du ledte efter, men de poster, der kun har nogle af ordene og i en anden rækkefølge. Den, du viste, vil sandsynligvis være en af de højest rangerende, men der er ingen garanti for, at den bliver højest rangerende.
Du vil måske bruge Boolesk fuldtekstsøgning
og sæt +
foran til hvert søgeord for at tvinge MySQL til kun at returnere de poster, der har alle søgeordene til stede:
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);
Men on
skal enten være et stopord (det er på standard stipword-listerne) eller skal være kortere end den mindste ordlængde, så det skal udelades fra søgeudtrykket (du får ingen resultater tilbage):
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);
Jeg ved, at dette kræver ændring af søgeudtrykket, men dette vil give dig de bedste resultater ved at bruge MySQL's indbyggede funktionalitet.
Alternativet er at bruge andre fuldtekst søgemaskiner, såsom sfinx for at udføre søgningen for dig.