Ver Mensaje Individual
  #6 (permalink)  
Antiguo 14/03/2012, 11:57
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Probloemas con like

Cita:
EDITO: No había leído la respuesta de h2swider, es la misma que doy. Saludos.
Hola yop289:

Tal como ya lo mencionó acertadamente gnzsoloyo tienes un grave problema con el modelo de datos que estás manejando al tener campos multivaluados, pero por experiencia propia sé que en muchas ocasiones no es posible realizar un cambio al modelo (sobre todo cuando el jefe no quiere aplicar cambios ), por lo tanto hay que ajustarse a lo que hay. veo que estás utilizando como separador espacio-coma-espacio correcto??? si es así, se me ocurren dos formas para resolver tu problema:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM nombres;
  2. +------+---------------------------------------------+
  3. | id   | nombres                                     |
  4. +------+---------------------------------------------+
  5. |    1 | jose antonio , ramon , jose maria , gonzalo |
  6. |    2 | jose antonio , jose , luis , jose luis      |
  7. |    3 | jose , mario , alvaro , fernado , jose      |
  8. +------+---------------------------------------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT id, nombres FROM nombres
  12.     -> WHERE
  13.     -> FIND_IN_SET('jose', REPLACE(nombres, ' , ', ',')) > 0;
  14. +------+----------------------------------------+
  15. | id   | nombres                                |
  16. +------+----------------------------------------+
  17. |    2 | jose antonio , jose , luis , jose luis |
  18. |    3 | jose , mario , alvaro , fernado , jose |
  19. +------+----------------------------------------+
  20. 2 rows in set (0.00 sec)
  21.  
  22. mysql>
  23. mysql> SELECT id, nombres FROM nombres
  24.     -> WHERE
  25.     -> nombres LIKE 'jose ,%' OR
  26.     -> nombres LIKE '%, jose ,%' OR
  27.     -> nombres LIKE '%, jose';
  28. +------+----------------------------------------+
  29. | id   | nombres                                |
  30. +------+----------------------------------------+
  31. |    2 | jose antonio , jose , luis , jose luis |
  32. |    3 | jose , mario , alvaro , fernado , jose |
  33. +------+----------------------------------------+
  34. 2 rows in set (0.00 sec)

En el primer ejemplo utiliza la función FIND_IN_SET para buscar, pero el separador por defecto es coma, no espacio-coma-espacio... por eso el REPLACE.

La segunda forma sería buscando las posibles posiciones donde encontrar la palabra, es decir, al inicio de la cadena, en medio o al final. Por supuesto que esto puede resultar fatal para el rendimiento del servidor.

Soy de la misma opinión que gnzsoloyo, si te es posible cambia tu modelo de datos y evita dolores de cabeza en el futuro.

Saludos
Leo.