Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

LIKE en un procedure mysql

Estas en el tema de LIKE en un procedure mysql en el foro de Mysql en Foros del Web. EStimados estoy tratando de hacer un procedure que tiene dentro de sí un LIKE que lo aplico sobre un parametro que se ingresa. Lo que ...
  #1 (permalink)  
Antiguo 08/04/2012, 20:21
 
Fecha de Ingreso: junio-2011
Ubicación: Argentina
Mensajes: 32
Antigüedad: 12 años, 11 meses
Puntos: 2
LIKE en un procedure mysql

EStimados estoy tratando de hacer un procedure que tiene dentro de sí un LIKE que lo aplico sobre un parametro que se ingresa.
Lo que busco es q me obtenga los datos de la tabla usuarios donde el nombre (u_nombre) sea igual al parametro que estoy pasando.
El codigo que hice es este:

Código MySQL:
Ver original
  1. delimiter//
  2. CREATE PROCEDURE mana(IN palabra VARCHAR(20))
  3. DECLARE var VARCHAR(30);
  4. SET var= CONCAT(" ' ",palabra," ' ");
  5. SELECT * FROM usuarios WHERE u_nombre LIKE var;

El parametro que se ingresa y pretendo usar en el like es "palabra".
Me sale este error:

1054 - Unknown column 'xxxx' in 'field list', donde xxxx es el parametro que ingrese.
  #2 (permalink)  
Antiguo 09/04/2012, 08:57
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: LIKE en un procedure mysql

Hola srnetworks:

En tu post pones esto:

Cita:
Lo que busco es q me obtenga los datos de la tabla usuarios donde el nombre (u_nombre) sea igual al parametro que estoy pasando.
Para esto NO NECESITAS UTILIZAR LA CLÁUSULA LIKE, DEBES HACERLO DIRECTAMENTE CON UN =, el operador LIKE se utiliza para búsqueda de patrones y nunca de debe utilizar para condiciones de igualdad. el procedimiento quedaría más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM usuarios;
  2. +------+----------+
  3. | u_id | u_nombre |
  4. +------+----------+
  5. |    1 | uno      |
  6. |    2 | dos      |
  7. |   11 | otro uno |
  8. +------+----------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> DROP PROCEDURE IF EXISTS `pruebas`.`mana`;
  12. Query OK, 0 rows affected (0.00 sec)
  13.  
  14. mysql> DELIMITER $$
  15. mysql> CREATE PROCEDURE `pruebas`.`mana`(IN palabra VARCHAR(20))
  16.     -> BEGIN
  17.     -> SELECT * FROM usuarios WHERE u_nombre = palabra;
  18.     -> END$$
  19. Query OK, 0 rows affected (0.00 sec)
  20.  
  21. mysql> DELIMITER ;
  22.  
  23. mysql> CALL mana('uno');
  24. +------+----------+
  25. | u_id | u_nombre |
  26. +------+----------+
  27. |    1 | uno      |
  28. +------+----------+
  29. 1 row in set (0.00 sec)
  30.  
  31. Query OK, 0 rows affected (0.02 sec)

Debes tener cuidado en que el nombre de los parámetros de tus procedimientos NO SEAN IGUALES A NOMBRES DE COLUMNAS EN TUS TABLAS. Haz la prueba y nos comentas.

Saludos
Leo.
  #3 (permalink)  
Antiguo 09/04/2012, 20:35
 
Fecha de Ingreso: junio-2011
Ubicación: Argentina
Mensajes: 32
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: LIKE en un procedure mysql

Lo que pretendo es traer los resultados de una busqueda con ese SELECT, por lo que creo que habria que usar el LIKE.
Por ejemplo paso el parametro "juan", y me debe devolver todos los resultados donde u_nombre sea juan.
No se si me hago entender, esta consulta la hago para mostrar los resultados de una busqueda, por eso uso select y like. Y ahi es la cuestion que me da ese error.
  #4 (permalink)  
Antiguo 10/04/2012, 08:08
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: LIKE en un procedure mysql

Hola srnetworks:

Veo que no terminas de entender para qué se utiliza el operador LIKE. De la manera en que estás utilizandolo FUNCIONA EXACTAMENTE IGUAL QUE UNA CONDICIÓN DE IGUALDAD. Como te dije en el post pasado, el operador LIKE sirve para búsqueda de patrones, SIEMPRE Y CUANDO SE UTILICEN CARACTERES COMODÍN (%, _) checa este script:

Código MySQL:
Ver original
  1. mysql> select * from usuarios;
  2. +------+----------+
  3. | u_id | u_nombre |
  4. +------+----------+
  5. |    1 | uno      |
  6. |    2 | dos      |
  7. |   11 | otro uno |
  8. |    3 | uno      |
  9. +------+----------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> select * from usuarios where u_nombre = 'uno';
  13. +------+----------+
  14. | u_id | u_nombre |
  15. +------+----------+
  16. |    1 | uno      |
  17. |    3 | uno      |
  18. +------+----------+
  19. 2 rows in set (0.03 sec)
  20.  
  21. mysql> select * from usuarios where u_nombre like 'uno';
  22. +------+----------+
  23. | u_id | u_nombre |
  24. +------+----------+
  25. |    1 | uno      |
  26. |    3 | uno      |
  27. +------+----------+
  28. 2 rows in set (0.03 sec)
  29.  
  30. mysql> select * from usuarios where u_nombre like '%uno%';
  31. +------+----------+
  32. | u_id | u_nombre |
  33. +------+----------+
  34. |    1 | uno      |
  35. |   11 | otro uno |
  36. |    3 | uno      |
  37. +------+----------+
  38. 3 rows in set (0.00 sec)

Observa las dos primeras consultas, REGRESAN EXACTAMENTE EL MISMO RESULTADO, pero la condición de igualdad es más eficiente que el LIKE.

En cuanto al error, ¿probaste el código que puse?, es decir, no comentas nada acerca de si pudiste resolver el problema con el código que te pose o sigues en las mismas... mucho ojo con eso.

Saludos
Leo.

Etiquetas: errores, procedure, sintaxis
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:13.