Foros del Web » Programando para Internet » PHP »

Consultas Mysql

Estas en el tema de Consultas Mysql en el foro de PHP en Foros del Web. Saludos comunidad, Soy visitante constante a esta comunidad desde hace poco debido que apenas me estoy iniciando en este mundo de la programación... y estoy ...
  #1 (permalink)  
Antiguo 25/02/2013, 03:00
 
Fecha de Ingreso: febrero-2013
Ubicación: Tuluá
Mensajes: 5
Antigüedad: 11 años, 1 mes
Puntos: 0
Pregunta Consultas Mysql

Saludos comunidad,

Soy visitante constante a esta comunidad desde hace poco debido que apenas me estoy iniciando en este mundo de la programación... y estoy contento pero por esto necesito también que me ayuden en algo. Que ya ando confundido y creo que estoy equivocado.

Tengo una base de datos MySql creada de la siguiente manera,

Y necesito Consultar la información de ella como por ejemplo Información de los casos con los datos del personal que haya dado respuesta y también del personal que está encargado del caso con respectiva información (Nombre y cargo).
He intentado hacer la consulta con Inner Join, Left Join pero no logro extraer la información correctamente...


SELECT casos.*, personal.*, encargados
.*, respuestas.*
FROM casos
LEFT JOIN personal
ON personal.id=casos.user_id
LEFT JOIN encargados
ON encargados.user_id=personal.id
LEFT JOIN respuestas
ON respuestas.id_caso=casos.id

De esta consulta logro mostrar alguna info pero por ejemplo no me sale la info personal de la persona encargada del caso...

Le agradezco enormemente que me den una ayuda indicándome como es la mejor manera de consultar esta información.

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 25/02/2013, 04:02
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consultas Mysql

Código MySQL:
Ver original
  1. SELECT c.id,
  2. c.Tipo_caso,
  3. c.Mensaje,
  4. ep.Id IdEncargado,
  5. ep.Nombre NombreEncargado,
  6. ep.Cargo CargoEncargado,
  7. r.Id IdRespuesta,
  8. r.Respuesta,
  9. rp.Id IdUsuResponde,
  10. rp.Nombre NombreUsuResponde,
  11. rp.Cargo CargoUsuResponde
  12. FROM (Casos c
  13.           INNER JOIN
  14.               (Encargados e INNER JOIN Personal ep ON e.User_id=ep.Id)
  15.           ON c.Id=e.Id_caso)
  16.           INNER JOIN
  17.              (Respuestas r INNER JOIN Personal rp ON r.User_id=rp.Id)
  18.           ON c.Id=r.Id_caso


Personal debe relacionarse dos veces ya que contiene tanto los Usuarios que responden como los Encargados.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 25/02/2013, 08:36
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Consultas Mysql

Ya que eres nuevo en esto, es importante que ingreses al foro adecuado... este foro es de PHP, y tu pregunta es de MYSQL, tenemos un foro mysql para evacuar este tipo de consultas y seguro le sacas provecho.

Visítalo: http://www.forosdelweb.com/f86/
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #4 (permalink)  
Antiguo 25/02/2013, 09:05
 
Fecha de Ingreso: febrero-2013
Mensajes: 3
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Consultas Mysql

y usando una subselect?

Última edición por adad1; 25/02/2013 a las 09:11 Razón: no entendí bien la consulta
  #5 (permalink)  
Antiguo 26/02/2013, 04:20
 
Fecha de Ingreso: febrero-2013
Ubicación: Tuluá
Mensajes: 5
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Consultas Mysql

Cita:
Iniciado por quimfv Ver Mensaje
Código MySQL:
Ver original
  1. SELECT c.id,
  2. c.Tipo_caso,
  3. c.Mensaje,
  4. ep.Id IdEncargado,
  5. ep.Nombre NombreEncargado,
  6. ep.Cargo CargoEncargado,
  7. r.Id IdRespuesta,
  8. r.Respuesta,
  9. rp.Id IdUsuResponde,
  10. rp.Nombre NombreUsuResponde,
  11. rp.Cargo CargoUsuResponde
  12. FROM (Casos c
  13.           INNER JOIN
  14.               (Encargados e INNER JOIN Personal ep ON e.User_id=ep.Id)
  15.           ON c.Id=e.Id_caso)
  16.           INNER JOIN
  17.              (Respuestas r INNER JOIN Personal rp ON r.User_id=rp.Id)
  18.           ON c.Id=r.Id_caso


Personal debe relacionarse dos veces ya que contiene tanto los Usuarios que responden como los Encargados.
quimfv te Agradezco con el Alma! Me ha sido de gran ayuda!
Pero tengo una duda adicional... en el caso de hayan varios Encargados al mismo caso? actualmente con esta consulta obtengo el primero... es posible obtener los otros o le estoy pidiendo mucho a MySQL nuevamente mil gracias!
  #6 (permalink)  
Antiguo 26/02/2013, 05:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consultas Mysql

No si hay varios encargados saldran todos, y te va a repetir las respuestas para cada encargado...para ello debe haber varios iduser para un mismo idcaso en la tabla encargados.

Fijate que no estoy usando para nada el campo User_id de la tabla Casos... (de hecho no se que significado tiene, podria ser el usuario que ha publicado el caso ... pero si no es ademas uno de los encargados no van asalir sus datos... para que saliera habria que relacionar otra vez la taba personal, esta vez directamente con Casos.

La relación Casos Encargados Personal tal y como lo tienes es una relación N:M y la quiery lo respeta (Casos Respuestas Personal tambien es N:M y tambien se respeta). Cada caso puede tener N encargados y cada Personal puede ser encargado de M casos, lo mismo para las repuestas...

En cambio Casos Personal, por el campo User_id de Casos seria una relacion 1:N que no queda reflejada en la query que te mande...Cada caso solo se relaciona con un Usuario (1) pero cada usuario se puede relacionar con N casos.

Código MySQL:
Ver original
  1. SELECT c.id,
  2. c.Tipo_caso,
  3. c.Mensaje,
  4. cp.Id IdPublicador, --<---
  5. cp.Nombre NombrePublicador,  --<---
  6. cp.Cargo CargoPublicador, --<---
  7. ep.Id IdEncargado,  
  8. ep.Nombre NombreEncargado,
  9. ep.Cargo CargoEncargado,
  10. r.Id IdRespuesta,
  11. r.Respuesta,
  12. rp.Id IdUsuResponde,
  13. rp.Nombre NombreUsuResponde,
  14. rp.Cargo CargoUsuResponde
  15. FROM ((Casos c INNER JOIN Personal cp ON c.User_id=cp.Id) --<----
  16.           INNER JOIN
  17.               (Encargados e INNER JOIN Personal ep ON e.User_id=ep.Id)
  18.           ON c.Id=e.Id_caso)
  19.           INNER JOIN
  20.              (Respuestas r INNER JOIN Personal rp ON r.User_id=rp.Id)
  21.           ON c.Id=r.Id_caso;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 26/02/2013 a las 05:25
  #7 (permalink)  
Antiguo 26/02/2013, 05:29
 
Fecha de Ingreso: febrero-2013
Ubicación: Tuluá
Mensajes: 5
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Consultas Mysql

Sí quimfv, mi error... es que le añadí Group by c.id entonces obviamente solo me sale una vez, esto lo hice precisamente para que no me saliera "repetido" la información de los casos al Exportarlos a Excel. Y efectivamente le agregue el usuario que ha publicado el caso como me lo indicas basado en tu ejemplo. (Voy aprendiendo jeje)
Pero ahora sí no sé que hacer por que Necesito a todos los Encargados pero que no se repita la Info del caso, Alguna idea?
Nuevamente gracias!
  #8 (permalink)  
Antiguo 26/02/2013, 05:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consultas Mysql

No... la unica manera seria tratar la salida externamente.. quizas las tablablas dinamicas de excel te sirve....

O hacer consultas independeintes... primero obtener la lista de casos (con su "Publicador"), para cada caso sus encargados y otra vez para cada caso sus repuestas y montar una tabla ....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: consulta-mysql, mysql
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 08:13.