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

[SOLUCIONADO] Obtener n registros detalles de cada registro maestro

Estas en el tema de Obtener n registros detalles de cada registro maestro en el foro de Mysql en Foros del Web. Buenas gente, recurro al foro porque quería resolver un sql, que seguramente algún experto podrá saber como resolver, yo ya me quemé las pocas neuronas!! ...
  #1 (permalink)  
Antiguo 05/05/2014, 08:24
 
Fecha de Ingreso: abril-2012
Mensajes: 30
Antigüedad: 12 años, 6 meses
Puntos: 0
Obtener n registros detalles de cada registro maestro

Buenas gente, recurro al foro porque quería resolver un sql, que seguramente algún experto podrá saber como resolver, yo ya me quemé las pocas neuronas!!

Tengo una tabla detalle con 10 registros, de los cuales (siempre un ejemplo), 5 tienen un código maestro 1, y los otros un código maestro 2.

¿Cómo resuelvo traer de los primeros 5 solamente 3 registros y de los otros 5 otros 3?

Ejemplo: [descripcion],[cod_maestro]

Naranja, 1
Pera, 1
Manzana, 1
Frutilla, 1
Mandarina, 1
Lechuga, 2
Zanahoria, 2
Remolacha, 2
Cebolla, 2
Acelga, 2

y que me devuelva:

Naranja, 1
Pera, 1
Manzana, 1
Lechuga, 2
Zanahoria, 2
Remolacha, 2


¿Es posible?

Desde ya muchas gracias a todos!!!
  #2 (permalink)  
Antiguo 05/05/2014, 11:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Obtener n registros detalles de cada registro maestro

locurafragil, si es tan simple como tu ejemplo y no hay muchos códigos, es decir, que quieres eso que pides, yo lo intentaría con
UNION. Un ejemplo sin criterio de orden antes del limit

Código MySQL:
Ver original
  1. (SELECT descripcion, codigomaestro FROM tutabla WHERE codigomaestro = 1 LIMIT 3)
  2. (SELECT descripcion, codigomaestro FROM tutabla WHERE codigomaestro = 2 LIMIT 3)


Dinos si es esto lo que buscas o hay muchos codigomaestro.

Si la consulta es más compleja, mira aquí:
http://www.artfulsoftware.com/infotr...tip.php?id=104
consulta sacada de esta página recomendada en las FAQ de MySQL
http://www.artfulsoftware.com/infotree/queries.php

Última edición por jurena; 05/05/2014 a las 14:28
  #3 (permalink)  
Antiguo 05/05/2014, 16:24
 
Fecha de Ingreso: abril-2012
Mensajes: 30
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Obtener n registros detalles de cada registro maestro

Gracias @jurena por la respuesta, en realidad el ejemplo que puse fue muy tonto, pero la realidad es que los códigos maestros pueden ser n...

Lo pensé por el lado del UNION, pero para eso debería obtener los códigos y armar el sql dinámicamente con el php y que haya tantos sql-union como códigos maestros tenga, pero no es precisamente lo que estaba tratando de resolver.

Otra opción es armar un sql común y corriente y hacer el corte de control con PHP pero tampo quería hacer eso, sino que lo quería resolver directamente en el sql.

Por lo que vi rápidamente en el ejemplo que me pasaste creo que por ese lado puede ir la respuesta.


Básicamente lo que quiero hacer un listado de "n" albums de fotos, donde en una primera vista muestro las 3 primeras fotos de cada album con un carrusel jquery, luego si mostrar todas. Por eso quería ver si se puede desde el sql traer tres o cuatro registros detalle (ruta de las fotos) de cada maestro (album)...


Investigo lo que me mandaste y se encuentro la solución lo posteo!

Saludos
  #4 (permalink)  
Antiguo 05/05/2014, 16:52
Avatar de 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
Puntos: 2658
Respuesta: Obtener n registros detalles de cada registro maestro

Vamos a intentar un juego complicado:
Código MySQL:
Ver original
  1. SELECT descripcion, codigomaestro
  2.   (SELECT descripcion, codigomaestro, IF(codigomaestro = @cm, @cont:=@cont+1, @cont:=1) cnt, IF(codigomaestro = @cm, @cm:=codigomaestro, @cm) cm
  3.   FROM
  4.     (SELECT descripcion, codigomaestro
  5.     FROM tutabla JOIN (SELECT @cm:=0, @cont:=0) T1
  6.     ORDER BY codigomaestro, descripcion) T2
  7.   )T3
  8. WHERE cnt<=3
  9. ORDER BY descripcion, codigomaestro;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/05/2014, 03:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Obtener n registros detalles de cada registro maestro

gnzsoloyo,
estaría bien subir a nuestras FAQ una consulta estándar de estos top n con agrupado (ej. 3 de cada grupo), y ampliar la información con explicaciones del código SQL. Son muy frecuentes las preguntas al respecto y nos vendría bien un ejemplo claro y explicado. Creo que no lo he visto y siempre viene bien tenerlo a mano.
  #6 (permalink)  
Antiguo 06/05/2014, 03:39
Avatar de 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
Puntos: 2658
Respuesta: Obtener n registros detalles de cada registro maestro

Buena idea. Voy a ver si lo puedo llevar, o bien ¿podrías hacerlo?
AL menos hoy, me va a resultar complicado antes de la noche... :D
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 06/05/2014, 06:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Obtener n registros detalles de cada registro maestro

Uffff tambien me apunto a una explicación de esa query.

Gracias de antemano @gnzsoloyo
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #8 (permalink)  
Antiguo 06/05/2014, 07:27
 
Fecha de Ingreso: abril-2012
Mensajes: 30
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Obtener n registros detalles de cada registro maestro

Buenas gente, después de analizar el código de gnzsoloyo (genio!!), nos sentamos con un amigo (Luciano conocido como @inluciad) e intentamos resolverlo a partir del concepto que nos pasó!!!

No olvido que @jurena también me posteo la solución en el primer enlace, era cuestión de estudiarla!!

Finalmente lo pudimos resolver!!!

El código nos funcionó de esta forma:



Código SQL:
Ver original
  1. SELECT IF(codigomaestro = @cm, @contador:=@contador+1, @contador:=1 AND @cm:=codigomaestro) contador,  descripcion, codigomaestro
  2.  
  3. FROM (SELECT @cm:=1, @contador:=0) r, tabladetalle
  4.  
  5. GROUP BY contador, codigomaestro
  6. HAVING contador <= 3
  7.  
  8. ORDER BY codigomaestro


Explico más o menos la query:
- En el IF hacemos la comparación del código maestro, si es igual incrementamos @contador en 1 sino le asignamos 1 y además asignamos a codigomaestro el del registro actual.
- Luego del FROM asignamos las variables y nombramos la tabla.
- Finalmente agrupamos por codigomaestro y mencionamos si o sí en el GROUP BY al contador para poder utilizarlo en el HAVING


De esta forma me trae tres registros detalle de cada registro maestro!!

Desde ya muchas gracias a todos!!!

Última edición por locurafragil; 06/05/2014 a las 07:37

Etiquetas: detalle, maestro
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 07:44.