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

Problema en CASE en SELECT - Rutina

Estas en el tema de Problema en CASE en SELECT - Rutina en el foro de Mysql en Foros del Web. Buenos dias foreros!!! Estoy armando un buscador que necesito que sea eficiente, por lo tanto la estoy diseñando como una rutina, la llamo desde PHP ...
  #1 (permalink)  
Antiguo 11/08/2012, 09:46
 
Fecha de Ingreso: marzo-2010
Mensajes: 34
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta Problema en CASE en SELECT - Rutina

Buenos dias foreros!!! Estoy armando un buscador que necesito que sea eficiente, por lo tanto la estoy diseñando como una rutina, la llamo desde PHP y realizo la busqueda en MYSQL.
La consulta es en cuanto a un select, cuando llegan los parametros de la busqueda tengo que ver, si llega cierto dato de una categoria, necesito hacer un join en una tabla extra que es grupo_categoria... pero eso seria la idea de fondo.
El problema es que para eso utilizo la siguiente rutina (es solo un fragmento de la rutina, pero es donde tengo el problema, por eso quizas falten parametros de la rutina completa)..

BEGIN
SET categoria=CONCAT(',',categoria,','); // aca tomo el valor que llegar como parametro
SELECT g.*,
case when categoria!=',,'
then convert((SELECT gc.categoria_id
FROM grupo_categoria gc
JOIN grupo g ON g.id=gc.grupo_id
WHERE gc.grupo_id=g.id) using utf8)
else '' end as `categoria_id`
FROM grupo g
where
1 = 1;

END

Mi problema es que en el Select, quiero evaluar si llega el parametro categoria, quiero que se seleccione dicho campo de esa tabla y a su vez necesito convertirla a utf8... sino viene quiero que ese campo este vacio... quizas estoy utilizando mal el case when -> else... pero Mysql me dice que hay un error en esa parte del codigo y no entiendo porque... Alguien tiene idea si esta mal utilizado o como podria hacer para consultar si el campo categoria es diferente a ese string=',,' que haga el select con el join, y sino que lo deje como una cadena vacia????

Desde ya muchas gracias!!!
  #2 (permalink)  
Antiguo 11/08/2012, 09:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema en CASE en SELECT - Rutina

La doble barra no es la forma de poner comentarios en el código. Eso funciona en algunos lenguajes de programación, pero no en MySQL.
Código MySQL:
Ver original
  1. -- Esto es un comentario. Solo funciona en un renglon.
  2. # Esto es otro comentario, solo para renglones.
  3. /* Esto es un comentario que dura basta que aparece el cierre*/
  4. // Esto no es un comentario.
¿Notas la diferencia?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/08/2012, 09:59
 
Fecha de Ingreso: marzo-2010
Mensajes: 34
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Problema en CASE en SELECT - Rutina

Si, si... jajajaj, pero fue un comentario que lo puse mientras copiaba el codigo del Workbench al post... jajaja, pero fue solo un descuido mio... es decir, no es ese el problema que me esta largando mysql....
Gracias de todas maneras, alguien tiene idea que puede llegar a ser?
  #4 (permalink)  
Antiguo 11/08/2012, 11:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema en CASE en SELECT - Rutina


Bueno, es el error que me está marcando el MySQL Workbench...
SI está dando otro error, entonces puede ser de lógica o de datos.



Personalmente, yo que tu aprovecharía mejor las capacidades del SP para poder hacer algo mas que construir una consulta tan complicada, cuando puedes resolver el problema de forma estructurada:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE stored_test(IN categoria VARCHAR(200))
  4.    IF categoria = '' OR categoria IS NULL THEN
  5.        SELECT g.*, '' categoria
  6.        FROM grupo G;
  7.     ELSE
  8.        SELECT g.*, '' categoria
  9.        FROM grupo G INNER JOIN grupo_categoria GC ON G.id = GC.grupo_id;
  10.     END IF;

Escribir más código no significa necesariamente hacer cosas complejas, sino buscar resolver los problemas en un orden más simple.
Por cierto, tengo SP que tienen más de 500 líneas... Y aún así son muy eficientes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: casewhen, rutina, buscadores
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 00:18.