Questa non è una domanda semplice. La soluzione migliore è utilizzare un tipo di ricerca fulltext . La ricerca fulltext può essere configurata per avere stopword (parole che vengono omesse dalla ricerca, come la parola the
) e può avere anche un limite minimo di lunghezza delle parole (anche le parole con una lunghezza inferiore a determinati caratteri vengono omesse dalla ricerca.
Tuttavia, se usi semplicemente
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');
Quindi MySQL restituirà non solo il record con il valore che stavi cercando, ma i record che contengono solo alcune parole e in ordine diverso. Quello che hai mostrato sarà probabilmente uno di quelli con il punteggio più alto, ma non vi è alcuna garanzia che sarà uno con il punteggio più alto.
Potresti voler usare Ricerca booleana fulltext
e anteporre +
a ogni parola di ricerca per forzare MySQL a restituire solo quei record che hanno tutte le parole di ricerca presenti:
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);
Ma, on
dovrebbe essere una stopword (è negli elenchi di stipword predefiniti) o dovrebbe essere più breve della lunghezza minima della parola, quindi dovrebbe essere omesso dall'espressione di ricerca (non otterrai alcun risultato):
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);
So che ciò richiede un'alterazione dell'espressione di ricerca, tuttavia ciò ti consentirà di ottenere i migliori risultati utilizzando la funzionalità integrata di MySQL.
L'alternativa è utilizzare altri motori di ricerca fulltext, come sfinge per eseguire la ricerca per te.