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

Obtener la suma más alta cumpliendo varias condiciones a la vez

Estas en el tema de Obtener la suma más alta cumpliendo varias condiciones a la vez en el foro de Mysql en Foros del Web. Hola a todos, Primero que todo muy Feliz Año para todos!!.............soy más que nuevo, ya que soy nuevo en el foro y además en las ...
  #1 (permalink)  
Antiguo 01/01/2013, 06:06
 
Fecha de Ingreso: enero-2013
Mensajes: 16
Antigüedad: 11 años, 3 meses
Puntos: 0
Obtener la suma más alta cumpliendo varias condiciones a la vez

Hola a todos,

Primero que todo muy Feliz Año para todos!!.............soy más que nuevo, ya que soy nuevo en el foro y además en las lides relacionadas con el desarrollo web, por ende no se extrañen si mi pregunta y/o mi manera de preguntar no son las mejores .

Mi solicitud de ayuda tiene que ver con que tengo la tabla "tblVotos_fotos" con la siguientes estructura:

id int(11) NOT NULL auto_increment,
idFoto int(11) NOT NULL,
idVotante int(11) NOT NULL,
idDueno_foto int(11) NOT NULL,
intVoto int(1) NOT NULL,
dateFecha_voto timestamp NOT NULL,

Necesito obtener el "idFoto" con la mayor cantidad de votos y esa cantidad, cumpliendo las siguientes condiciones:
1.- Que sea para el "idDueno_foto" que quiera. (WHERE idDueno_foto= 'x')......Mi problema viene ahora.........
2.- Considerando(sumando) el último voto realizado por el "idVotante", ya que este puede actualizar su voto cuantas veces quiera y estos quedan registrados en la misma tabla (sirve para conocer su comportamiento).

He tratado usando INNER JOIN, HAVING IN, subconsultas anidadas.........pero la verdad estoy mareado.

Entiendo que para lograr lo que quiero necesito primero ordenar, agrupar y descartar registros; obteniendo lo siguiente por ej:

id idFoto idVotante idDueno_foto intVoto dateFecha_voto
2 | 1 | 45 | 58 | 1 | 20/12/2012
5 | 1 | 40 | 58 | 0 | 22/12/2012
9 | 1 | 38 | 58 | 1 | 24/12/2012
3 | 2 | 40 | 58 | 1 | 21/12/2012
7 | 2 | 45 | 58 | 0 | 23/12/2012

y sobre esto podría obtener que "idFoto" =1 es la más votada con 2 votos.

Espero que se entienda y perdón por no usar código, si para alguien es mejor.

Gracias de antemano por su tiempo y ayuda.

Quedo atento a sus consultas y/o respuestas.

Saludos.
  #2 (permalink)  
Antiguo 02/01/2013, 05:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Obtener la suma más alta cumpliendo varias condiciones a la vez

Deberias aclarar como registras dos votos del mismo votante en el mismo dia, eso usando un DATETIME permitiria obtener el ultimo voto ....

Primero obtenemos el ultima fecha (habria que mejorar lo de la hora) para cada votante y foto

Código MySQL:
Ver original
  1. SELECT t.idVotante,t.idFoto,max(t.dateFecha_voto) as fechaMax
  2. FROM tblVotos_fotos t
  3. GROUP BY t.idVotante,t.idFoto

Usando la anterior obtenemos los votos a considerar (con lo que cumpliremos la segunda condición)

Código MySQL:
Ver original
  1. SELECT v.id,v.idFoto,v.idVotante,v.idDueno_foto,v.intVoto
  2. FROM tblVotos_fotos v INNER JOIN
  3. (SELECT t.idVotante,t.idFoto,max(t.dateFecha_voto) as fechaMax
  4. FROM tblVotos_fotos t
  5. GROUP BY t.idVotante,t.idFoto) as Sbc
  6. ON v.idFoto=Sbc.idFoto
  7.    and v.idVotante=Sbc.idVotante
  8.    and v.dateFecha_voto=Sbc.fechaMax

Ahora ya solo falta sumar y filtrar modificando la anterior (para cumplir la primera condición)

Código MySQL:
Ver original
  1. SELECT v.idFoto,SUM(v.intVoto) as votos
  2. FROM tblVotos_fotos v INNER JOIN
  3. (SELECT t.idVotante,t.idFoto,max(t.dateFecha_voto) as fechaMax
  4. FROM tblVotos_fotos t
  5. GROUP BY t.idVotante,t.idFoto) as Sbc
  6. ON v.idFoto=Sbc.idFoto
  7.    and v.idVotante=Sbc.idVotante
  8.    and v.dateFecha_voto=Sbc.fechaMax
  9. WHERE v.idDueno_foto=58
  10. GROUP BY v.idFoto
Si ahora ordenamos y elegimos la primera ya lo tendremos ....("idFoto" con la mayor cantidad de votos)

Código MySQL:
Ver original
  1. SELECT v.idFoto,SUM(v.intVoto) as votos
  2. FROM tblVotos_fotos v INNER JOIN
  3. (SELECT t.idVotante,t.idFoto,max(t.dateFecha_voto) as fechaMax
  4. FROM tblVotos_fotos t
  5. GROUP BY t.idVotante,t.idFoto) as Sbc
  6. ON v.idFoto=Sbc.idFoto
  7.    and v.idVotante=Sbc.idVotante
  8.    and v.dateFecha_voto=Sbc.fechaMax
  9. WHERE v.idDueno_foto=58
  10. GROUP BY v.idFoto

Solo tienes que ejecutar la última, las anteriores son para que se vea el proceso seguido para llegar al resultado.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 02/01/2013 a las 06:01
  #3 (permalink)  
Antiguo 02/01/2013, 11:02
 
Fecha de Ingreso: enero-2013
Mensajes: 16
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Obtener la suma más alta cumpliendo varias condiciones a la vez

qimfv...........que puedo decir!!!!!............MÁS que clara tu explicación.

Gracias por tus ganas para explicar todo el proceso, cosa que es realmente necesaria para poder entender a cabalidad como obtener lo que andaba buscando y de paso poder obtener hartos datos más que pueden ser importantes.

Un millón de gracias!!!...............y felicitaciones por el buen trabajo y buena disposición para ayudar.

Por seguro que volveré por estos lados........así que solamente......Hasta pronto!!!!!!!!

Etiquetas: condiciones, registros, suma, tabla, vez, altas
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 18:24.