Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/10/2011, 11:15
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con buscador

Hola cabeto_1972:

Creo que te estás confundiendo en cuanto al funcionamiento del operador LIKE... cuanto tu pones algo como esto:

Código:
campo LIKE '%una palabra%'
Lo que estás indicando sería traer todos los campos que contengan la frase "una palabra":

Código MySQL:
Ver original
  1. mysql> create table Ejemplo (campo varchar (40));
  2. Query OK, 0 rows affected (0.12 sec)
  3.  
  4. mysql> insert into ejemplo values ('una palabra al inicio'),
  5.     -> ('en medio una palabra mas'), ('al final una palabra'),
  6.     -> ('no contiene la frase'), ('una no palabra está en orden');
  7. Query OK, 5 rows affected (0.07 sec)
  8. Records: 5  Duplicates: 0  Warnings: 0
  9.  
  10. mysql> select * from ejemplo;
  11. +------------------------------+
  12. | campo                        |
  13. +------------------------------+
  14. | una palabra al inicio        |
  15. | en medio una palabra mas     |
  16. | al final una palabra         |
  17. | no contiene la frase         |
  18. | una no palabra está en orden |
  19. +------------------------------+
  20. 5 rows in set (0.00 sec)
  21.  
  22. mysql> select * from ejemplo where campo like '%una palabra%';
  23. +--------------------------+
  24. | campo                    |
  25. +--------------------------+
  26. | una palabra al inicio    |
  27. | en medio una palabra mas |
  28. | al final una palabra     |
  29. +--------------------------+
  30. 3 rows in set (0.09 sec)

observa que el 4to. registro no se muestra porque NO CONTIENE LA FRASE, en el caso del 5to. registro tampoco se muestra, pues aunque contiene las dos palabras que componen la frase ESTAS NO SE ENCUENTRAN JUNTAS.

Para hacer funcionar la búsqueda con un Like tendrías que hacerlo más o menos así:

Código MySQL:
Ver original
  1. mysql> select * from ejemplo where campo like '%una%' and campo like '%palabra%';
  2.  
  3. +------------------------------+
  4. | campo                        |
  5. +------------------------------+
  6. | una palabra al inicio        |
  7. | en medio una palabra mas     |
  8. | al final una palabra         |
  9. | una no palabra está en orden |
  10. +------------------------------+
  11. 4 rows in set (0.00 sec)

Es decir descomponiendo la búsqueda en palabras sueltas. Esto por supuesto puede no ser muy eficiente, sobre todo porque al al realizar la búsqueda sobre tres campos, primero tendrías que concatenarlos o hacer la comparación sobre cada uno de ellos:

Código:
Concat(name, sub1, sub2) like '%carlos%' and
Concat(name, sub1, sub2) like '%canada%' and
Concat(name, sub1, sub2) like '%alberta%'
Te recomiendo que le des un vistazo a lasFunciones de búsqueda de texto completo (Full-Text)

Estoy seguro que te puede servir.

Saludos
Leo.