Me gustaría buscar en mi tabla una columna de nombres y una columna de apellidos. Acepto actualmente un término de búsqueda de un campo y compararla con las dos columnas, una a la vez con¿Cómo usar mysql concat() en la cláusula WHERE?
select * from table where first_name like '%$search_term%' or
last_name like '%$search_term%';
Esto funciona muy bien con los términos de búsqueda de palabras individuales, pero el conjunto de resultados incluye a todos con el nombre de "Larry". Pero si alguien ingresa un nombre, luego un espacio, luego un apellido, quiero un resultado de búsqueda más estrecho. He intentado lo siguiente sin éxito.
select * from table where first_name like '%$search_term%' or last_name
like '%$search_term%' or concat_ws(' ',first_name,last_name)
like '%$search_term%';
¿Algún consejo?
EDITAR: El nombre con el que estoy probando es "Larry Smith". El db almacena "Larry" en la columna "first_name" y "Smith" en la columna "last_name". Los datos están limpios, no hay espacios adicionales y el término de búsqueda se recorta a izquierda y derecha.
EDIT 2: Probé la respuesta de Robert Gamble esta mañana. El suyo es muy similar a lo que estaba corriendo anoche. No puedo explicarlo, pero esta mañana funciona. La única diferencia que puedo pensar es que anoche ejecuté la función concat como el tercer "o" segmento de mi consulta de búsqueda (después de buscar a través de first_name y last_name). Esta mañana lo ejecuté como el último segmento después de leer todo lo anterior, así como direcciones y nombres comerciales.
¿Funcionar con una función mysql al final de una consulta funciona mejor que en el medio?
Me acabo de encontrar la versión que estaba teniendo problemas con y funciona bien para mí. –