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?