Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/05/2010, 01:08
LorenzoR
 
Fecha de Ingreso: mayo-2010
Mensajes: 1
Antigüedad: 14 años, 10 meses
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?