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

Unificar fechas en SELECT en una sola celda.

Estas en el tema de Unificar fechas en SELECT en una sola celda. en el foro de Mysql en Foros del Web. Hola a todos, estoy tratando de realizar una consulta en PHP agrupando en un campo las fechas, el modelo de tablas es el siguiente: gestion ...
  #1 (permalink)  
Antiguo 17/02/2010, 14:25
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Unificar fechas en SELECT en una sola celda.

Hola a todos, estoy tratando de realizar una consulta en PHP agrupando en un campo las fechas, el modelo de tablas es el siguiente:

gestion
Código:
id_gestion   |    id_cliente   |   fecha
       1                1                    2009-01-01
       2                1                    2009-05-02
       3                1                    2010-02-03
cliente
Código:
id_cliente    |        nombre   
      1                  Prueba
Ok, para traer todas las fechas de ese cliente hago:

Código:
SELECT gs.fecha, cli.nombre FROM  gestion gs, cliente cli  WHERE cli.id_cliente = gs.id_cliente
Mi duda es, en MySQL es posible agrupar todas esas fechas en una sola celda, separadas por un \n.

es decir, q me arroje como resultado:

Código:
2009-01-01          
2009-05-02                  Prueba
2010-02-03

Agradezco la ayuda que me puedan brindar :) .
  #2 (permalink)  
Antiguo 17/02/2010, 14:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Unificar fechas en SELECT en una sola celda.

Para eso se usa GROUP_CONCAT(), la única duda sería ¿para qué?.
Es decir, una vez que las tengas reunidas en una sola celda, todas separadas por comas, por ejemplo, ¿de qué modo las vas a usar?
Si nos das una idea, tal vez podamos orientarte hacia qué foro o de qué modo te resultará más útil.
__________________
¿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 17/02/2010, 15:27
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Respuesta: Unificar fechas en SELECT en una sola celda.

Muchas gracias por la respuesta :), con eso y SEPARATOR me quedo perfectamente, pero ahora mi consulta se complica un poco más ya que la tabla de gestiones tiene un campo relacionado con una tabla llamada efectividad.

gestion(añadi una columa (arbol_id))
Código:
id_gestion   |    id_cliente   |   fecha              |    arbol_id
       1                1                    2009-01-01            1
       2                1                    2009-05-02            2 
       3                1                    2010-02-03            1
arbol
Código:
arbol_id   |    efectividad  
     1                 EFECTIVO
     2                 NO EFECTIVO
Código:
SELECT COUNT(gs.fecha), cli.cl_nombre,cli.documento, GROUP_CONCAT  (gs.fecha SEPARATOR '\n') FROM cliente cli, gestion gs, arbol ab WHERE cli.id_cliente = gs.id_cliente  AND  gs.aarbol_id = ab.arbol_id AND ab.efectividad LIKE 'EFECTIVO' GROUP BY cli.identificacion  ORDER BY cli.identificacion ASC, gs.gs_fecha ASC
Hasta ahi lo tengo y esta bien :) , me muestra el numero de gestiones efectivas, las fechas en una unica celda y la identificación.

Ahora la cosa se complica cuando quiero que en esa misma consulta me muestre en otra celda las fechas que estan como no efectivas, ya que un cliente puede tener gestiones tanto efectivas como no efectivas y que en otra columna me muestre cuantas no efectivas hay, hasta acá llegúe y no he podido hacer esa combinación, espero me puedas ayudar :) .

Gracias de nuevo.

Última edición por delta132; 17/02/2010 a las 15:40
  #4 (permalink)  
Antiguo 17/02/2010, 15:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Unificar fechas en SELECT en una sola celda.

Obviamente estás usando la tabla devuelta en otro lenguaje...
Bueno. El GROUP_CONCAT() tiene una opción que deberías probar: SEPARATOR, donde le puedes definir un string determinado para ser usado, por ejemplo:
Código MySQL:
Ver original
  1. SELECT GROUP_CONCAT(CAMPO_ID SEPARATOR '<br>')
  2. FROM TABLA;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 17/02/2010, 15:46
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Respuesta: Unificar fechas en SELECT en una sola celda.

Jejeje si, mientras escribia mi mensaje encontre esa opción muchas gracias, ya edite el mensaje anterior con otro inconveniente que tengo :( .

Gracias de nuevo.
  #6 (permalink)  
Antiguo 17/02/2010, 16:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Unificar fechas en SELECT en una sola celda.

Cita:
Ahora la cosa se complica cuando quiero que en esa misma consulta me muestre en otra celda las fechas que estan como no efectivas, ya que un cliente puede tener gestiones tanto efectivas como no efectivas y que en otra columna me muestre cuantas no efectivas hay, hasta acá llegúe y no he podido hacer esa combinación, espero me puedas ayudar :) .
Aquí la cosa se vuelve más elaborada.
Es posible que se pueda resolver en una sola consulta, pero para eso deberías explicar un poco más detallado cómo es la estructura de campos y qué define que una fecha sea efectiva o no.

Sería conveniente que postearas la estructura de las tablas involucradas y tal vez un ejemplo de datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 18/02/2010, 08:20
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Respuesta: Unificar fechas en SELECT en una sola celda.

Vale, muchas gracias por responder :), la estructura de las tablas es así:


Código:
gestion
id_gestion   |    detalle_gestion  |    fecha_gestion   |  arbol_id

Código:
arbol
arbol_id   |    descripcion   |    efectividad

Código:
clientes 
id_cliente  |  documento  | razon_social

Una gestión es efectiva siempre y cuando en la tabla de gestiones en el campo arbol_id se almacene el id de un registro que este como EFECTIVO en la tabla arbol, ejemplo:

Código:
arbol
arbol_id   |    descripcion          |    efectividad
   1                  Cancelo todo            EFECTIVO
   2                  Bloqueo tarjeta        NO EFECTIVO
   3                  Libre deuda              EFECTIVO

Ahora en las gestiones queda así:


Código:
gestion
id_gestion   |    detalle_gestion  |    fecha_gestion   |  arbol_id   |   id_cliente
     1                      Paga todo,..             2009-02-02          1                  1
     2                     Intentos fallidos..     2009-05-05           2                  1
     3                    Libera deuda...          2009-12-05           3                  1
La gestion con id 1 y 3 son efectivas, la 2 no.

Como tengo la consulta hasta el momento gracias a tu ayuda me permite saber el cliente cuantas gestiones efectivas tiene y en un campo me agrupa las fechas de esas gestiones efectivas.

Ahora la necesidad es que en otro campo me arroje el número de gestiones no efectivas y en otro campo las fechas de esas gestiones no efectivas, algo así:

cliente = 123 , 2 efectivas , (2009-02-02,2009-12-05 ), 1 no efectiva, (2009-05-05)


De momento lo hace hasta acá:
cliente = 123 , 2 efectivas , (2009-02-02,2009-12-05 )

Código:
SELECT COUNT(gs.fecha), cli.cl_nombre,cli.documento, GROUP_CONCAT  (gs.fecha SEPARATOR '\n') FROM cliente cli, gestion gs, arbol ab WHERE cli.id_cliente = gs.id_cliente  AND  gs.arbol_id = ab.arbol_id AND ab.efectividad LIKE 'EFECTIVO' GROUP BY cli.identificacion  ORDER BY cli.identificacion ASC, gs.gs_fecha ASC
Pero no sé como integrar lo no efectivo ahí mismo.

Espero me puedas colaborar porque no doy con el chiste para sacar esta consulta.

Etiquetas: celda, fechas, select
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 22:17.