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

if dentro de GROUP_CONCAT

Estas en el tema de if dentro de GROUP_CONCAT en el foro de Mysql en Foros del Web. Hola a todos, saludos: Necesito hacer un if pero por lo que estuve leyendo, parece que no es posible Tengo un GROUP_CONCAT() y dentro de ...
  #1 (permalink)  
Antiguo 24/01/2012, 19:08
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
if dentro de GROUP_CONCAT

Hola a todos, saludos:

Necesito hacer un if pero por lo que estuve leyendo, parece que no es posible


Tengo un GROUP_CONCAT() y dentro de él necesito hacer el if ej:

Código MySQL:
Ver original
  1.  
  2. 'Categoria:',
  3.  
  4. CONCAT( nombre,' 'apellido )
  5.  
  6. SEPARATOR '.<br><br>'
  7.  
  8. ) as usuario


Esto me estaría devolviendo algo asi


Categoria: Roberto Gomez.

Yo necesito en lugar de la palabra Categoria poner la categoria del user, ej Administrador, Moderador, Usuario simple, etc etc de manera que me quede algo así

Administrador: Roberto Gomez
Administrador: Carlos Peresoso
Moderador: Raquel sarasa
Usuario simple: Manolito Urquirezaga


Como hago un if justo donde está la palabra Categoria teniendo en cuenta que el campo de categoria de usuarios se llama ucat y contiene un numero 1, 2 ó 3?

Código MySQL:
Ver original
  1.  
  2. 'Categoria:',
  3.  
  4. CONCAT( nombre,' 'apellido )
  5.  
  6. SEPARATOR '.<br><br>'
  7.  
  8. ) as usuario
__________________
la la la
  #2 (permalink)  
Antiguo 25/01/2012, 09:45
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: if dentro de GROUP_CONCAT

Hola truman_truman:

No le veo mucho caso a querer concatenar el resultado desde la consulta, si el objetivo es meramente visual, lo puedes hacer mediante programación, recuperando cada campo por separado y mostrándolos todos al mismo tiempo, pero bueno esa es otra historia... vayamos con la consulta.

Lo ideal es que tuvieras un catálogo con las descripciones para cada tipo de usuario, de tal manera que pudieras hacer un INNER JOIN y simplemente incluir el campo en el SELECT, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM usuarios;
  2. +------------+-----------------+----------+-------------+
  3. | id_usuario | id_tipo_usuario | nombre   | apellido    |
  4. +------------+-----------------+----------+-------------+
  5. |          1 |               1 | Roberto  | Gomez       |
  6. |          2 |               1 | Carlos   | Peresoso    |
  7. |          3 |               2 | Raquel   | sarasa      |
  8. |          4 |               3 | Manolito | Urquirezaga |
  9. +------------+-----------------+----------+-------------+
  10. 4 rows in set (0.01 sec)
  11.  
  12. mysql> SELECT * FROM tipos_usuarios;
  13. +-----------------+----------------+
  14. | id_tipo_usuario | descripcion    |
  15. +-----------------+----------------+
  16. |               1 | Administrador  |
  17. |               2 | Moderador      |
  18. |               3 | Usuario simple |
  19. +-----------------+----------------+
  20. 3 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT CONCAT_WS(' ', CONCAT(TU.descripcion, ':'), U.nombre,
  23.     -> U.apellido) nombre
  24.     -> FROM usuarios U
  25.     -> INNER JOIN tipos_usuarios TU ON U.id_tipo_usuario = TU.id_tipo_usuario;
  26. +--------------------------------------+
  27. | nombre                               |
  28. +--------------------------------------+
  29. | Administrador: Roberto Gomez         |
  30. | Administrador: Carlos Peresoso       |
  31. | Moderador: Raquel sarasa             |
  32. | Usuario simple: Manolito Urquirezaga |
  33. +--------------------------------------+
  34. 4 rows in set (0.00 sec)

Esta es la forma ideal de hacerlo. Ahora bien, si no tienes en una tabla las descripciones para cada tipo de usuario, puedes utilizar un CASE-WHEN, en su forma simple:

Código SQL:
Ver original
  1. mysql> SELECT CONCAT_WS(' ',
  2.     -> CASE id_tipo_usuario
  3.     -> WHEN 1 THEN 'Administrador:'
  4.     -> WHEN 2 THEN 'Moderador:'
  5.     -> WHEN 3 THEN 'Usuario simple:'
  6.     -> END,
  7.     -> U.nombre, U.apellido) nombre
  8.     -> FROM usuarios U;
  9. +--------------------------------------+
  10. | nombre                               |
  11. +--------------------------------------+
  12. | Administrador: Roberto Gomez         |
  13. | Administrador: Carlos Peresoso       |
  14. | Moderador: Raquel sarasa             |
  15. | Usuario simple: Manolito Urquirezaga |
  16. +--------------------------------------+
  17. 4 ROWS IN SET (0.02 sec)

El resultado es el mismo, pero la consulta no es óptima... Dale un vistazo a las consultas y nos comentas.

NOTA IMPORTANTE: Al inicio de tu post mencionas que estás utilizando un GROUP CONCAT, mucho ojo, pues esa función no sirve para concatenar varios campos en uno solo, sino que agrupa varios registros en uno solo:

Código MySQL:
Ver original
  1. mysql> SELECT GROUP_CONCAT(nombre) FROM usuarios
  2.     -> GROUP BY id_tipo_usuario;
  3. +----------------------+
  4. | GROUP_CONCAT(nombre) |
  5. +----------------------+
  6. | Roberto,Carlos       |
  7. | Raquel               |
  8. | Manolito             |
  9. +----------------------+
  10. 3 rows in set (0.06 sec)

Observa que lo que hace la consulta es agrupar por TIPO DE USUARIO, por lo tanto ROBERTO Y CARLOS que son administradores quedan en un mismo registro. Dale un vistazo a la documentación de funciones con cadena para ver uso y diferencias.

Saludos
Leo.

Última edición por leonardo_josue; 25/01/2012 a las 09:53
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 11:01.