Det här är ingen enkel fråga. Det bästa är att använda någon typ av fulltextsökning . Fulltextsökning kan konfigureras för att ha stoppord (ord som utelämnas från sökningen - som ordet the
) och kan också ha en minsta ordlängdsgräns (ord med mindre än vissa tecken långa utelämnas också från sökningen.
Men om du bara använder
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');
Då kommer MySQL att returnera inte bara posten med det värde du letade efter, utan posterna som bara har några av orden, och i annan ordning. Den du visade kommer förmodligen att vara en av de högst rankade, men det finns ingen garanti för att den kommer att vara högst rankad.
Du kanske vill använda boolesk fulltextsökning
och infoga +
till varje sökord för att tvinga MySQL att endast returnera de poster som innehåller alla sökord:
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);
Men, on
bör antingen vara ett stoppord (det finns på standardlistordslistorna) eller bör vara kortare än den minsta ordlängden, så bör utelämnas från sökuttrycket (du får inga resultat):
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);
Jag vet att detta kräver ändring av sökuttrycket, men detta ger dig de bästa resultaten med MySQL:s inbyggda funktionalitet.
Alternativet är att använda andra fulltextsökmotorer, såsom sfinx för att utföra sökningen åt dig.