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

Optimizar consulta

Estas en el tema de Optimizar consulta en el foro de Bases de Datos General en Foros del Web. Tengo una base de datos para una aplicacion web en la que los usuarios envian resultados de partidos de futbol y van sumando puntos por ...
  #1 (permalink)  
Antiguo 18/05/2010, 01:08
 
Fecha de Ingreso: mayo-2010
Mensajes: 1
Antigüedad: 14 años
Puntos: 0
Optimizar consulta

Tengo una base de datos para una aplicacion web en la que los usuarios envian resultados de partidos de futbol y van sumando puntos por cada partido acertado.
El o los usuarios que mas partidos acierten en una fecha (o jornada), ganan esa fecha. Para encontrar los ganadores de cada fecha, itero entre 1 y ULTIMA_FECHA y para cada fecha, hago esta consulta:

Código:
SELECT user.id, COUNT( * ) AS aciertos
FROM  `prode` ,  `user` ,  `match` 
WHERE match.id = prode.match_id
	AND match.resultado = prode.prode_result
	AND user.id = prode.user_id
	AND match.torneo LIKE  'Clausura 10'
	AND match.fecha = '$fecha'
GROUP BY user.username
HAVING COUNT( * ) = ( 
					SELECT MAX( aciertos2 ) 
					FROM (
						SELECT COUNT( * ) AS aciertos2
						FROM  `prode` ,  `match` 
						WHERE  `match`.id =  `prode`.match_id
						AND  `match`.resultado =  `prode`.prode_result
						AND  `match`.torneo LIKE  'Clausura 10'
						AND  `match`.fecha = '$fecha'
						GROUP BY user_id 
					) AS tablaAux
				)	
ORDER BY ACIERTOS DESC , user.username
Donde $fecha varia entre 1 y 19 (esta fecha no es DATE)

Estas son las tablas:
Código:
--
-- Table structure for table `match`
--

CREATE TABLE `match` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `local` varchar(30) NOT NULL DEFAULT '',
  `visitante` varchar(30) NOT NULL DEFAULT '',
  `resultado` varchar(40) DEFAULT NULL,
  `torneo` varchar(40) NOT NULL DEFAULT 'Apertura 08',
  `fecha` int(11) NOT NULL DEFAULT '0',
  `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`),
  UNIQUE KEY `local` (`local`,`torneo`,`fecha`),
  UNIQUE KEY `visitante` (`visitante`,`torneo`,`fecha`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;


--
-- Table structure for table `prode`
--

CREATE TABLE IF NOT EXISTS `prode` (
  `prode_id` int(11) NOT NULL AUTO_INCREMENT,
  `match_id` int(11) NOT NULL DEFAULT '0',
  `user_id` int(11) NOT NULL DEFAULT '0',
  `prode_result` varchar(30) NOT NULL DEFAULT '',
  `prode_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`prode_id`),
  UNIQUE KEY `torneo` (`torneo`,`match_id`,`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
Estoy buscando la forma de reemplazar el ciclo para iterar entre las fechas, y tener una sola consulta que me devuelva una tabla con los usuarios y cuantas fechas gano cada uno.
Alguna idea?

Etiquetas: bases-de-datos
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 16:27.