En cuanto a la sentencia que se debe usar, si la búsqueda debe hacerse sobre varios campos al mismo tiempo, es mejor primero ver qué campos son los que se usarán para buscar, porque el resultado y la dificultad de crear la sentencia variarán enormemente según el caso:
- Si el dato a buscar es de tipo alfanumérico, por ejemplo, no tiene sentido invocar campos de fecha, numéricos o booleanos. Esto ya nos permite reducir las posibilidades a sólo campos de caracteres, textos o enum.
- Si el tipo de datos es numérico puede que sólo nos interesen los campos numéricos. Pero si ese numero corresponde a cualquier cosa, sólo quedan fuera los booleanos o de fecha.
- Si son de fecha, puede que sólo queden los de fecha, o si la fecha puede estar en un texto, habrá que incluir todos los campos cuya longitud sea mayor o igual a 8 (longitud de una fecha).
Como verás, esto puede implicar que debas crear más de una sentencia a usar, usando aquella que se ajuste mejor a la búsqueda a realizar.
Usar una sola sentencia puede terminar siendo sumamente ineficiente. No existen sentencias genéricas que sean óptimas para ningún tipo de bases de datos. Yo tengo aplicaciones que sólo tienen 12 tablas y usan más de 50 tipos de construcciones de sentencias diferentes, simplemente para consultar los datos de diferentes formas.
Mientras precisa sea la creación de la consulta, incluso si esta es variable, más eficientes se vuelven las consultas.
Finalmente, en cuanto a la sentencia misma, para tu caso no es LIKE lo mejor que puedes usar, sino las búsquedas de texto completo, que te pueden devolver un conjunto de registros donde aparece lo buscado, jerarquizados de mayor relevancia a menor relevancia. Es el caso de las
funciones de búsqueda de texto completo (Full-Text), que tiene esta forma:
que tiene, por ejemplo este uso:
En este caso, en MATCH van las columnas contra las que se realizará la busqueda.
Esta forma tiene dos limitaciones:
1) Sólo funciona cuando se crean índices FULLTEXT, por ejemplo:
2) Sólo se pueden crear estos índices en tablas de tipo MyISAM. Las InnoDB no sirven.
Prueba el caso y veremos a partir de allí.