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

Ayuda con consulta

Estas en el tema de Ayuda con consulta en el foro de Mysql en Foros del Web. Cualquier ayuda o indicio me sirve. Aunque es algo que una vez hice pero ya no me acuerdo. Tengo tres tablas: persona (nombre_persona, id_persona) cargos ...
  #1 (permalink)  
Antiguo 16/03/2010, 20:17
Avatar de gersveo  
Fecha de Ingreso: julio-2008
Mensajes: 145
Antigüedad: 15 años, 9 meses
Puntos: 5
Ayuda con consulta

Cualquier ayuda o indicio me sirve. Aunque es algo que una vez hice pero ya no me acuerdo.

Tengo tres tablas:
  1. persona (nombre_persona, id_persona)
  2. cargos (nombre_cargo, id_cargo, id_persona_lider)
  3. persona_cargos (id_cargo, id_persona)
una persona puede liderar uno o varios cargos y un cargo es solo liderado por una persona.

una persona puede participar o pertenecer a uno o varios cargos y en a un cargo puede pertenecer una o varias personas.

PERSONA lidera CARGOS (uno a varios)
PERSONA participa CARGOS (varios a varios) ==> PERSONA_CARGOS

Ahora lo que quiero hacer es una consulta que me muestre el nombre del cargo, nombre del lider de ese cargo y la cantidad de personas que participan de ese cargo(count()). Se debe incluir en el resultado los cargos que aun no tienen participantes osea cantidad=0.

Código SQL:
Ver original
  1. SELECT COUNT(pc.id_cargo) AS cantidad, p.nombre_persona, c.nombre_cargo
  2. FROM persona p, cargo c, persona_cargo pc
  3. WHERE p.id_persona=c.id_persona_lider AND
  4.               pc.id_cargo=c.id_persona
  5. ORDER BY pc.id_cargo

esta consulta me devuelve los resultados pero no me cuenta los cargos que aún no tienen participantes.
  #2 (permalink)  
Antiguo 17/03/2010, 08:18
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: Ayuda con consulta

Te falta un group by en la sentencia.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 17/03/2010, 08:29
Avatar de gersveo  
Fecha de Ingreso: julio-2008
Mensajes: 145
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Ayuda con consulta

Cita:
Iniciado por huesos52 Ver Mensaje
Te falta un group by en la sentencia.

saludos
si correcto, en lugar de un order by era un group by, pero aun no me muestra cantidad=0 para los cargos que no tengan participantes o integrantes.
Código MySQL:
Ver original
  1. SELECT count(pc.id_cargo) AS cantidad, p.nombre_persona, c.nombre_cargo
  2. FROM persona p, cargo c, persona_cargo pc
  3. WHERE p.id_persona=c.id_persona_lider AND
  4. * * * * * * * pc.id_cargo=c.id_persona
  5. group by pc.id_cargo
Cualquier otra ayuda me sirve.

Última edición por gersveo; 17/03/2010 a las 08:30 Razón: agregar comentario
  #4 (permalink)  
Antiguo 17/03/2010, 08:34
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: Ayuda con consulta

Debes combinar un poco un left join y la función ifnull

Código SQL:
Ver original
  1. SELECT
  2. COUNT(ifnull(pc.id_cargo,0)) AS cantidad,
  3. p.nombre_persona,
  4. c.nombre_cargo
  5. FROM persona p
  6. LEFT JOIN
  7. cargo c
  8. ON
  9. p.id_persona=c.id_persona_lider
  10. LEFT JOIN
  11. persona_cargo pc
  12. ON
  13. pc.id_cargo=c.id_persona
  14. GROUP BY pc.id_cargo

No lo he probado, pero por ahí es la cosa.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 17/03/2010, 14:46
Avatar de gersveo  
Fecha de Ingreso: julio-2008
Mensajes: 145
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Ayuda con consulta

Cita:
Iniciado por huesos52 Ver Mensaje
Debes combinar un poco un left join y la función ifnull

Código SQL:
Ver original
  1. SELECT
  2. COUNT(ifnull(pc.id_cargo,0)) AS cantidad,
  3. p.nombre_persona,
  4. c.nombre_cargo
  5. FROM persona p
  6. LEFT JOIN
  7. cargo c
  8. ON
  9. p.id_persona=c.id_persona_lider
  10. LEFT JOIN
  11. persona_cargo pc
  12. ON
  13. pc.id_cargo=c.id_persona
  14. GROUP BY pc.id_cargo

No lo he probado, pero por ahí es la cosa.

saludos
huesos52 esta consulta me genera una fila de más con datos NULL menos el nombre del lider(cantidad=28, nombre_persona='Natalia....', cargo=NULL) cuando esta persona no tiene nada que ver con la tabla CARGO y PERSONA y cuando la cantidad deberia ser 0 aparece 1, entonces le modifiqué una cosa y la fila que era NULL ya no me aparece, pero me sigue apareciendo con valor CANTIDAD=1, cuando deberia aparecer CANTIDAD=0.
Código SQL:
Ver original
  1. SELECT
  2. COUNT(ifnull(pc.id_cargo,0)) AS cantidad,
  3. p.nombre_persona,
  4. c.nombre_cargo
  5. FROM cargo c
  6. LEFT JOIN
  7. persona p
  8. ON
  9. p.id_persona=c.id_persona_lider
  10. LEFT JOIN
  11. persona_cargo pc
  12. ON
  13. pc.id_cargo=c.id_persona
  14. GROUP BY pc.id_cargo

Etiquetas: Ninguno
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:58.