Al principio de tu mensaje interpreté que el valor a buscar te lo daban en cualquier orden y en una sola hilera, No en 3 y cualquiera pudiera ir sin valores. Ahora tengo más claro lo que necesitas.
Intenta la opción de
Teri. Si no te funciona, te dejo otra forma la cual creo que puede funcionarte y lo encontre en el manual de MySQL
6.3.1.4 Control Flow Functions. Es usando un
IF. Donde tengo dudas es que ahi lo usan dentro del SELECT y NO dentro de un WHERE. Además, te dejo la referencia de otras funciones que vamos a emplear
6.3.2 String Functions Código PHP:
SELECT nombre, apellido1, apellido2 FROM tnombre
WHERE
nombre LIKE CONCAT("%", TRIM(IF(LENGTH(TRIM($nomb)) > 0, $nomb, nombre)), "%") AND
apellido1 LIKE CONCAT("%", TRIM(IF(LENGTH(TRIM($apel1)) > 0, $apel1, apellido1)), "%") AND
apellido2 LIKE CONCAT("%", TRIM(IF(LENGTH(TRIM($apel2)) > 0, $apel2, apellido2)), "%")
Voy a tratar de explicar un poco el funcionamiento de este SELECT más que todo en la parte del WHERE.
Primero que todo, voy a suponer que estas usando PHP para desarrollar por lo que vamos a usar 3 variables
$nomb, $apel1 y $apel2. Antes de realizar el SELECT, debes asegurarte cuales variables estan en nulo y moverles un blanco " ".
Ahora lo que se va a hacer es evaluar cada condición, ejemplo:
nombre LIKE CONCAT("%", TRIM(IF(LENGTH(TRIM($nomb)) > 0, $nomb, nombre)), "%").
El CONCAT lo que va a hacer es poner
%resultado%, o sea, los signos de "%" al principio y al final.
El TRIM va a quitar TODOS los espacios o blancos a la izquierda y derecha.
El IF funciona así IF(1>0, "VERDADERO", "FALSO) si uno es mayor a cero, el resultado va a ser la literal "VERDADERO", en caso contrario, "FALSO".
El LENGTH, verifica si la hilera o variable no esté vacia quitando primero los blancos con TRIM. Si el resultado del IF es mayor a cero, evalúa lo que trae la variable, en caso ser cero, deja el contenido del campo
nombre. ¿Porqué se hace así? Esto es para que si se dejan en blanco todos los valores introducidos por el usuario, muestre todo el contenido de la tabla. En caso de introducir algún valor en alguno de los campos, evalúa la variable o variables introducida y donde no se puso nada, evalua el contendio del campo dentro de la tabla.
Bueno, fue mucha explicación la cual espero sea clara y funcione.