Esta no es una simple pregunta. Su mejor opción es usar algún tipo de búsqueda de texto completo . La búsqueda de texto completo se puede configurar para tener palabras vacías (palabras que se omiten de la búsqueda, como la palabra the
) y también puede tener un límite mínimo de longitud de palabras (las palabras con menos de ciertos caracteres también se omiten de la búsqueda.
Sin embargo, si simplemente usa
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');
Luego, MySQL devolverá no solo el registro con el valor que estaba buscando, sino también los registros que tienen solo algunas de las palabras y en un orden diferente. El que mostraste probablemente será uno de los de mayor rango, pero no hay garantía de que sea el de mayor rango.
Es posible que desee utilizar búsqueda booleana de texto completo
y anteponer +
a cada palabra de búsqueda para forzar a MySQL a devolver solo aquellos registros que tengan todas las palabras de búsqueda presentes:
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);
Pero, on
debe ser una palabra vacía (está en las listas de palabras clave predeterminadas) o debe ser más corta que la longitud mínima de la palabra, por lo que debe omitirse de la expresión de búsqueda (no obtendrá ningún resultado):
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);
Sé que esto requiere la alteración de la expresión de búsqueda, sin embargo, obtendrá los mejores resultados utilizando la funcionalidad integrada de MySQL.
La alternativa es utilizar otros motores de búsqueda de texto completo, como esfinge para realizar la búsqueda por usted.