Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/01/2012, 09:45
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: 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