Ver Mensaje Individual
  #9 (permalink)  
Antiguo 23/03/2010, 05:53
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 1 mes
Puntos: 2658
Respuesta: Ayuda, seleccionar sólo 5 datos BD

Mira, el problema que tienes viene por dos partes:
Por un lado, no sabes, o al menos se supone que no sabes, cuántos tipos hay inicialmente en esta relación, por lo que la consulta debe ser dinámica (establecerse para un resultado variable de tipos).
Por otro lado, lo que tu quieres no es el tipo, sino la lista de los 5 primeros de cada tipo, con lo que un simple LIMIT sobre un resultado agrupado y con HAVING COUNT(*)=5 no sirve.

Existe una solución que se me ocurre, pero es un poco complicada, ya que requiere tres niveles de subconsultas, y el uso de variables de usuario: Uno para crear las variables, el otro para hacer la cuenta de los tipos, y el restante (exterior) para obtener el resultado.
La idea sería mas o menos así:
Código MySQL:
Ver original
  1. SELECT id, nombre, tipo
  2.   (SELECT
  3.     IF(@TIP!= TIPO, @SUMA:=0, @SUMA) num,
  4.     IF(@TIP!= TIPO, @TIP:=TIPO, @TIP) tip,
  5.     ID,
  6.     NOMBRE,
  7.     TIPO,
  8.     @SUMA:=@SUMA+1
  9.   FROM tabla JOIN (SELECT @SUMA:=0, @TIP:=0)
  10.   ) T1
  11. WHERE num<=5
  12. ORDER BY tipo, id;

Este esquema, como está,devolvería los cinco primeros, haya o no cinco de cada tipo (ya o probé con una de mis tablas y funciona). SI lo que quieres es una cantidad específica (sólo los que tienen cinco o más tipos), la subconsulta de segundo nivel debe ser reformulada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)