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

Se puede hacer esta consulta???

Estas en el tema de Se puede hacer esta consulta??? en el foro de Mysql en Foros del Web. Hola a todos un saludo afectuoso Paso a mi consulta. Tengo una BD de una bitacora (registro de hechos o eventos) que consta de las ...
  #1 (permalink)  
Antiguo 08/09/2009, 09:28
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Se puede hacer esta consulta???

Hola a todos un saludo afectuoso

Paso a mi consulta. Tengo una BD de una bitacora (registro de hechos o eventos) que consta de las siguientes tablas

bitacora.
id_bitacora, timestamp, usuario, comentarios, valida ( id es PK, comentarios es un campo text para hacer un resumen ejecutivo bastante general de un periodo de trabajo, los comentarios específicos se declaran en el campo describe_evento de la tabla asociada al evento ocurrido)

luego hay 8 tablas identicas para cada tipo de evento identificado, por ejemplo:

cliente_vip
id,describe_evento, acciones_tomadas (id es PK de su tabla y FK de bitacora)

falla_sistemas
id,describe_evento, acciones_tomadas(id es PK de su tabla y FK de bitacora)

El tema es que necesito construir una consulta que me presente los eventos de la bitacora con el siguiente formato

id_bitacora, usuario, comentarios, (y ahora mi drama) describe_evento, acciones_tomadas.

Estos dos últimos campos vienen de distintas tablas, pero necesito listarlos verticalmente uno debajo del otro, o se una columna que liste todos los registros describe_evento, y otra con todos los registros de acciones_tomadas que cumplan con los filtros del where, que podría ser por ejemplo la fecha.
  #2 (permalink)  
Antiguo 08/09/2009, 09:44
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Se puede hacer esta consulta???

que tal chelodelsur
No se si te entendí bien, pero el problema lo tienes en que los dos ultimos campos tienen varios registros y los dos primeros un unico registro?

Mira el penultimo post de las faq's de mysql acerca de la función group_concat.

No se si te sirva.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 08/09/2009, 10:15
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: Se puede hacer esta consulta???

Hola Huesos52
Si es bien cercano a lo que necesito, mi complicación es que los registros pueden vienir de 8 tablas distintas.

Explico un poco la logica del sistema.
El sistema registra los eventos o sucesos que debe informar un usuario. La tabla principal es bitácora, id, timestamp,usuario, comentarios,valida. En esta tabla el usuario registra los datos generales de su informe.
Ahora hay definido 8 posibles eventos que pudieren o no presentarse en su tiempo de trabajo. Por lo mismo supongamos que hay una jornada donde solo hubo un evento; falla de un sistema: entonces se graban los datos generales en la tabla bitácora y en la tabla falla_sistemas se graban el id, que es el mismo de la tabla bitácora, y los comentarios de la falla en el campo describe_evento de esa tabla.
Resumiendo: para un id de bitacora, pueden haber desde 0 hasta 8 registros (uno en cada tabla respectiva) que mostrar en la columna `describe_evento` de la consulta. Con el ejemplo que me das estos 8 registros irían concatenados en una sola celda, me agrada la idea. Lo otro sería crear una nueva fila para cada registro.

ejemplo group_concat

id_bitacora, usuario, describe_evento
01_______, marcelo, Falla sistema: Fallo la web - cliente_vip: Llamó la Presidenta - etc
02_______,marcelo, cliente_vip: Llamó el senador xx

ejemplo lista
id_bitacora, usuario, describe_avento
01_______,marcelo,Falla_sistema: Fallo la web
01_______,marcelo,cliente_vip: Llamó la presidenta
02_______,marcelo,cliente_vip: Llamó el senador xx

Eso es, espero haberme explicado mejor,

quedo atento a sus comentarios
  #4 (permalink)  
Antiguo 08/09/2009, 10:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Se puede hacer esta consulta???

group_concat también aplica para múltiples anidaciones.

Escoge la forma que mas se acomode a tus necesidades. Igual, creo que desde el sistema, debes inventarte un conjunto de checkbox o algo por el estilo para representar los eventos y cualquiera de las dos formas te dará la info requerida.

Si a nivel visual puede ir separada por comas o guiones u otro caracter, te recomiendo hacerlo directamente con group_concat.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 08/09/2009, 15:41
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: Se puede hacer esta consulta???

Aquí de nuevo
Huesos, hechame una mano please.

El siguiento codigo trabaja a medias.
El primer grupo de concat, tiene un registro en cada sub grupo de concat, y los muestra correctamente.
En el segundo grupo de concat (rrhh), en el primer sub grupo de concat hay 2 registros, los que se concatenan correctamente, pero no me muestra los datos del segundo sub grupo de concat, o sea corta desde "Accion Tomada : " en adelante, presumo que es un efecto de los dos registros del primer sub grupo de concats

Código MySQL:
Ver original
  1. ba.id_registro,
  2. ba.fechahora,
  3. ba.agente,
  4. GROUP_CONCAT("Evento : ",
  5.      (SELECT GROUP_CONCAT(fpt.descripcion SEPARATOR " / " ) FROM bitacora b RIGHT JOIN falla_procenter_telefonia fpt ON b.id_registro = fpt.id )," Accion Tomada : ",
  6.      (SELECT  GROUP_CONCAT(fpt.acciones SEPARATOR " / " ) FROM bitacora b RIGHT JOIN falla_procenter_telefonia fpt ON b.id_registro = fpt.id )) procenter,
  7.      
  8. GROUP_CONCAT("Evento : ",
  9.      (SELECT GROUP_CONCAT(rh.descripcion SEPARATOR " / ") FROM bitacora bb RIGHT JOIN rr_hh rh ON bb.id_registro = rh.id ) , " Accion Tomada : ",
  10.      (SELECT GROUP_CONCAT(rhc.acciones  SEPARATOR " / ") FROM bitacora bc RIGHT JOIN rr_hh rhc ON bc.id_registro = rhc.id)) RRHH    
  11. FROM bitacora ba
  12. RIGHT JOIN falla_procenter_telefonia fpta ON ba.id_registro = fpta.id
  13. RIGHT JOIN rr_hh rha ON ba.id_registro = rha.id
  14. WHERE ba.valida = '0'
  15. GROUP BY ba.fechahora

Eso desde ya gracias
  #6 (permalink)  
Antiguo 09/09/2009, 00:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Se puede hacer esta consulta???

chelodelsur:
Si la estructura de tabla para los 8 tipos es la misma, creo que te has equivocado de estructura. Te habría bastado con 3 tablas
una bitacora, otra evento en la que añadirías un campo numérico,una FK para distinguir los 8 tipos, y una tercera para los tipos, con su PK, el nombre y algún otro campo.
De esa forma te bastaría hacer INNER JOIN entre las tres tablas para sacar el listado y un group y group_concat si quieres presentarlo de esa otra manera, aunque eso también puedes hacerlo con programación. Ten cuidado con el group_concat, que tiene límite y vas a introducir datos de campo TEXT de varios registros, hasta 8.
Cita:
The result is truncated to the maximum length that is given by the group_concat_max_len system variable, which has a default value of 1024. The value can be set higher, although the effective maximum length of the return value is constrained by the value of max_allowed_packet. The syntax to change the value of group_concat_max_len at runtime is as follows, where val is an unsigned integer:
  #7 (permalink)  
Antiguo 09/09/2009, 06:28
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: Se puede hacer esta consulta???

Muchas gracias Jurena por el aporte

Creo que tengo espacio para modificar la estructura de bd de la bitacora, lo voy a estudiar vere que resulta.

Muchas gracias a todos por la buena voluntad a ayudar.
  #8 (permalink)  
Antiguo 09/09/2009, 07:01
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: Se puede hacer esta consulta???

Que opinan de esta estructura???


Código MySQL:
Ver original
  1. CREATE SCHEMA IF NOT EXISTS `bitacora` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
  2. USE `bitacora`;
  3.  
  4. -- -----------------------------------------------------
  5. -- Table `bitacora`.`bitacora`
  6. -- -----------------------------------------------------
  7. CREATE  TABLE IF NOT EXISTS `bitacora`.`bitacora` (
  8.   `idbitacora` INT NOT NULL ,
  9.   `fechahora` TIMESTAMP NULL ,
  10.   `tipo_bitacora` VARCHAR(45) NULL ,
  11.   `usuario` VARCHAR(45) NULL ,
  12.   `resumen_turno` MEDIUMTEXT NULL ,
  13.   PRIMARY KEY (`idbitacora`) )
  14.  
  15.  
  16. -- -----------------------------------------------------
  17. -- Table `bitacora`.`tipo`
  18. -- -----------------------------------------------------
  19. CREATE  TABLE IF NOT EXISTS `bitacora`.`tipo` (
  20.   `idtipo` INT NOT NULL ,
  21.   `tipo_evento` VARCHAR(45) NULL ,
  22.   `comentarios` VARCHAR(45) NULL ,
  23.   PRIMARY KEY (`idtipo`) )
  24.  
  25.  
  26. -- -----------------------------------------------------
  27. -- Table `bitacora`.`eventos`
  28. -- -----------------------------------------------------
  29. CREATE  TABLE IF NOT EXISTS `bitacora`.`eventos` (
  30.   `ideventos` INT NOT NULL ,
  31.   `bitacora_idbitacora` INT NULL ,
  32.   `tipo_idtipo` INT NULL ,
  33.   `descripcion_evento` MEDIUMTEXT NULL ,
  34.   `acciones_evento` MEDIUMTEXT NULL ,
  35.   PRIMARY KEY (`ideventos`) ,
  36.   INDEX `fk_eventos_bitacora` (`bitacora_idbitacora` ASC) ,
  37.   INDEX `fk_eventos_tipo` (`tipo_idtipo` ASC) ,
  38.   CONSTRAINT `fk_eventos_bitacora`
  39.     FOREIGN KEY (`bitacora_idbitacora` )
  40.     REFERENCES `bitacora`.`bitacora` (`idbitacora` )
  41.   CONSTRAINT `fk_eventos_tipo`
  42.     FOREIGN KEY (`tipo_idtipo` )
  43.     REFERENCES `bitacora`.`tipo` (`idtipo` )

Les agradecería sus aportes

Saludos
  #9 (permalink)  
Antiguo 15/09/2009, 07:42
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años
Puntos: 2
Respuesta: Se puede hacer esta consulta???

No me molviden please!!!!

Mis dudas apuntan (o mi parte más debil) es la forma correcta de relacionar las tablas enventos con la tabla bitacora y tipo

Desde ya gracias
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 13:27.