2012-04-04 8 views
5

Tengo una tabla Usuario que tiene los campos (id, first_name, middle_name, last_name).Buscar una cadena en varios campos de una tabla

Deseo escribir una consulta para encontrar un usuario por su nombre. El nombre puede ser nombre, segundo nombre o apellido.

$sql = "SELECT * FROM user 
     WHERE first_name like '%$name%' OR 
       middle_name like '%$name%' OR 
       last_name like '%$name%'"; 

¿Es eficiente la consulta? (Deje el problema de seguridad por el momento.)

+1

¿Es eficiente en comparación con qué? – Jon

+0

De acuerdo con este comentario http://stackoverflow.com/questions/9986678/searching-more-than-1-column/9986696#comment12762483_9986696 UNION es más rápido –

+0

@Jon Quiero obtener una mejor consulta para realizar esa tarea. No estoy comparando con nada. –

Respuesta

3

mesa de alterar y para añadir índice de texto completo compuesto sobre First_name,second_name,last_name a continuación, utilizar esta consulta

select * 
from table_name 
where match (`First_name`,`second_name`,`last_name`) against('name') 

Es más o menos rápido que su consulta.

1

Tan pronto como tenga un LIKE '%something%' en su cláusula WHERE, forzará una exploración de tabla. Entonces, sí, es ineficiente, pero una o tres declaraciones LIKE harán poca diferencia.

El escaneo de tabla es el gran golpe de rendimiento.

Considere la posibilidad de mirar la capacidad Full Text Search de MySQL. Está diseñado para responder a este tipo de consultas de manera mucho más eficiente.

0

Si necesita buscar un patrón en más de un campo y si tiene permiso para cambiar el esquema de la tabla, le sugiero que implemente FULL-TEXT SEARCH.

espero que ayude :)

Cuestiones relacionadas