Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/05/2011, 11:09
DarkWater
 
Fecha de Ingreso: diciembre-2009
Mensajes: 186
Antigüedad: 14 años, 4 meses
Puntos: 5
Respuesta: Subconsulta LIMIT

Hola leonardo_josue, gracias por responder

Tengo las siguientes tablas:

Código:
DROP TABLE IF EXISTS estadisticas_partidos;
CREATE TABLE IF NOT EXISTS estadisticas_partidos
(
  estadisticas_partido_id int(30) NOT NULL,
  partido_id int(30) NOT NULL,
  valoracion int(30) NOT NULL,
  PRIMARY KEY (estadisticas_partido_id)
);


DELETE FROM estadisticas_partidos;

INSERT INTO estadisticas_partidos (estadisticas_partido_id, partido_id, valoracion) VALUES
	(2, 0, 1500),
	(5, 0, 0),
	(6, 0, 0),
	(7, 0, 3500),
	(17, 0, 1500),
	(66, 2, 1100),
	(67, 2, 0),
	(68, 2, 0),
	(72, 2, 500),
	(73, 1, 500),
	(75, 1, 500),
	(77, 1, 0),
	(80, 1, 0);



DROP TABLE IF EXISTS estadisticas_participantes_partidos;
CREATE TABLE IF NOT EXISTS estadisticas_participantes_partidos
(
  participante_id int(30) NOT NULL,
  estadisticas_partido_id int(30) NOT NULL
);


DELETE FROM estadisticas_participantes_partidos;
INSERT INTO estadisticas_participantes_partidos (participante_id, estadisticas_partido_id) VALUES
	(2, 2),
	(3, 5),
	(1, 6),
	(4, 7),
	(5, 17),
	(4, 66),
	(1, 67),
	(3, 68),
	(2, 72),
	(2, 73),
	(4, 75),
	(1, 77),
	(3, 80);
	
	

DROP TABLE IF EXISTS partidos;
CREATE TABLE IF NOT EXISTS partidos 
(
  partido_id int(30) NOT NULL,
  nombre varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (partido_id),
  UNIQUE KEY nombre (nombre)
);


DELETE FROM partidos;
INSERT INTO partidos (partido_id, nombre) VALUES
	(0, 'Street Fighter III Third strike: Fight for the future'),
	(1, 'Street Fighter Alpha 3'),
	(2, 'The King of Fighters 98');



DROP TABLE IF EXISTS ligas;
CREATE TABLE IF NOT EXISTS ligas 
(
  liga_id int(30) NOT NULL,
  partido_id int(30) NOT NULL,
PRIMARY KEY (liga_id)
);


DELETE FROM ligas;
INSERT INTO ligas (liga_id, partido_id) VALUES
	(0, 0),
	(1, 0),
	(2, 0),
	(3, 0),
	(4, 0),
	(5, 1),
	(6, 2);



DROP TABLE IF EXISTS participantes_ligas;
CREATE TABLE IF NOT EXISTS participantes_ligas
(
  participantes_ligas_id int(30) NOT NULL,
  liga_id int(30) NOT NULL,
  participante_id int(30) NOT NULL
);


DELETE FROM participantes_ligas;
INSERT INTO participantes_ligas (participantes_ligas_id, liga_id, participante_id) VALUES
	(0, 0, 1),
	(1, 0, 2),
	(2, 0, 3),
	(3, 0, 4),
	(16, 2, 1),
	(18, 2, 5),
	(40, 4, 1),
	(41, 4, 2),
	(42, 4, 3),
	(43, 4, 4),
	(44, 4, 5),
	(91, 4, 5),
	(105, 5, 2),
	(107, 5, 1),
	(108, 5, 3),
	(111, 5, 4),
	(112, 6, 1),
	(115, 6, 3),
	(116, 6, 2),
	(118, 6, 4);


DROP TABLE IF EXISTS participantes;
CREATE TABLE IF NOT EXISTS participantes 
(
  participante_id int(30) NOT NULL,
  nombre varchar(30) NOT NULL,
  PRIMARY KEY (participante_id)
);


DELETE FROM participantes;
INSERT INTO participantes (participante_id, nombre) VALUES
	(0, 'juan'),
	(1, 'victor'),
	(2, 'maria'),
	(3, 'jesus'),
	(4, 'daniel'),
	(5, 'anastasia');
Lo que quiero es sacar para cada partido los aquellos 5 que tienen la mayor valoracion en cada partido.
Para ello uso la consulta siguiente:

Código:
SELECT DISTINCT p.partido_id,participantes.participante_id,participantes.nombre
FROM participantes,partidos p
WHERE participantes.participante_id IN (SELECT participantes.participante_id
											      FROM estadisticas_partidos, estadisticas_participantes_partidos,participantes
											      WHERE estadisticas_partidos.estadisticas_partido_id=estadisticas_participantes_partidos.estadisticas_partido_id
												    AND estadisticas_participantes_partidos.participante_id=participantes.participante_id
												    AND estadisticas_partidos.partido_id=p.partido_id
											      ORDER BY valoracion DESC)
pero la subconsulta devuelve todos los participantes en cada partido. Si se pudiera usar LIMIT en la subconsulta estaría.

Gracias.