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

Unir mensajes de diferentes renglones

Estas en el tema de Unir mensajes de diferentes renglones en el foro de Mysql en Foros del Web. Hola tengo una consulta actualemente en la que ocupo dos querys y un ciclo para que aparesca como quiero. Pero quiero ver si lo puedo ...
  #1 (permalink)  
Antiguo 16/06/2011, 18:08
Avatar de dalyla  
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 8 meses
Puntos: 1
Pregunta Unir mensajes de diferentes renglones

Hola tengo una consulta actualemente en la que ocupo dos querys y un ciclo para que aparesca como quiero. Pero quiero ver si lo puedo hacer con una sola.

Por ejemplo ahora tengo algo asi:

Código SQL:
Ver original
  1. SELECT id, cliente, fecha, hora FROM atencion;

despues corro un ciclo
Código PHP:
Ver original
  1. select detalle from detalle_atencion where id=$row['id'];
  2.  
  3. while ...
  4.  if(...)
  5.     $memo = $memo . $row2['detalle'];
  6. end while;

La sintaxys de arriba es lo de menos, creo muestra la idea. Entonces imprimo algo asi:

fecha hora atencion
15-ene 10:35 Se llamo al tel 89 (registro 1)
------------------ Contesto el telefono (registro 2)
18-ene 12:36 Se hizo una visita (registro 203)
------------------ se dejo aviso en puerta( registro 205)

(cada fecha y hora es un renglon en mi tabla )

Basicamente asi, pero quiero evitarme el ciclo para concatenar los N registros que tenga por fecha o atencion.

Se me ocurrio algo asi




Código MySQL:
Ver original
  1. select id, fecha, hora,
  2. @d := if(@a <> id, @d:= detalle, concat(@d, char(13), detalle)) as det
  3.  
  4.  
  5. select a.id, a.fecha, a.hora,
  6. ad.detalle, @d:='', @a:=aid
  7. From atencion a left join atencion_detalle ad on ad.id=a.id
  8. WHERE cliente = 6
  9. ) as t


Pero el corte no lo hace correctamente, no se como decirle que ya cambio de id y comience de nuevo el memo.

Creo que esta un poco complicado, pero espero alguien me entienda
__________________
Ayudar a mejorar a los demas, es hacerte mejor a ti mismo ; )

Última edición por dalyla; 16/06/2011 a las 18:10 Razón: no se entendia la impresion
  #2 (permalink)  
Antiguo 17/06/2011, 09:56
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Unir mensajes de diferentes renglones

Saludos

Podrías postear la estructura de las tablas que utilizas en la consulta e indicarnos como quieres la salida ya que no me queda claro!..
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #3 (permalink)  
Antiguo 22/06/2011, 18:07
Avatar de dalyla  
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 8 meses
Puntos: 1
Respuesta: Unir mensajes de diferentes renglones

atencion [MASTER]
idatencion :integer;
cliente:integer;
fecha:date;
hora;

atencion_detalle [DETAIL]
idcontador: autoincrement;
idatencion :integer , (se liga con idatencion en tabla atencion)
detalle : Memo

El join deja mi consulta asi:

ID--IDATENCION--CLIENTE---DETALLE
248--12--23---se llamo para localizar la persona.
249--12--23---no contesto
250--12--23---se dejo mensaje en la constestadora

y quiero que me lo deje asi.

IDATENCION--CLIENTE--DETALLE
12--23--se llamo para localizar la persona. no contesto. se dejo mensaje en la contestadora
__________________
Ayudar a mejorar a los demas, es hacerte mejor a ti mismo ; )
  #4 (permalink)  
Antiguo 23/06/2011, 10:55
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Unir mensajes de diferentes renglones

Saludos

Te entiendo!! ese tipo de manipulación lo debes realizar con el lenguaje de programación que estas utilizando.
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #5 (permalink)  
Antiguo 27/06/2011, 16:32
Avatar de dalyla  
Fecha de Ingreso: septiembre-2005
Mensajes: 135
Antigüedad: 18 años, 8 meses
Puntos: 1
De acuerdo SOLUCION >u O

MySQL ya tiene una funcion para esto, es el GROUP_CONCAT(),

por lo que mi query quedaria asi:

Código MySQL:
Ver original
  1. Select idatencion, cliente, group_concat(detalle, char(13) order by id SEPARATOR '')

El char(13) para que me ponga el salto de linea,
el order by, porque si no me lo pone revuelto,
el separator, porque por default utiliza la coma.

Esta es la syntaxis de MySQL.

Código MySQL:
Ver original
  1. GROUP_CONCAT([DISTINCT] expr [,expr ...]
  2.              [ORDER BY {unsigned_integer | col_name | expr}
  3.                  [ASC | DESC] [,col_name ...]]
  4.              [SEPARATOR str_val])
  5. mysql> SELECT student_name,
  6.     ->     GROUP_CONCAT(test_score)
  7.     ->     FROM student
  8.     ->     GROUP BY student_name;

Espero a alquien le sirva porque como que no es muy comun
__________________
Ayudar a mejorar a los demas, es hacerte mejor a ti mismo ; )

Etiquetas: diferentes, mensajes
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:11.