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

Agrupar y mostrar hasta 3 registros por categoria

Estas en el tema de Agrupar y mostrar hasta 3 registros por categoria en el foro de Mysql en Foros del Web. Hola! Quiero hacer un select de una tabla de productos pero necesito que me liste los productos agrupados por categoria y que por cada categoria ...
  #1 (permalink)  
Antiguo 09/05/2012, 12:44
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 17 años, 9 meses
Puntos: 16
Pregunta Agrupar y mostrar hasta 3 registros por categoria

Hola!

Quiero hacer un select de una tabla de productos pero necesito que me liste los productos agrupados por categoria y que por cada categoria me muestre solo 3. Y para complicar las cosas voy a necesitar paginar los registros.

Para simplificar, digamos que la tabla productos es:
id, producto, categoria

Y yo quiero obtener
3, camara digital, electronica
7, modem, electronica
8, parlante, electronica
10, silla, muebles
13, mesa, muebles
...

¿alguna sugerencia? gracias!
__________________
Responder encuestas
  #2 (permalink)  
Antiguo 09/05/2012, 13:11
 
Fecha de Ingreso: mayo-2012
Mensajes: 42
Antigüedad: 12 años, 7 meses
Puntos: 5
Respuesta: Agrupar y mostrar hasta 3 registros por categoria

Hola quebien,

No se ajusta mucho a lo que pides y el código es muy sucio pero he hecho algo parecido, una función a la que le pasas los nombres de las categorías que quieres que te muestre (ej: "categorias('electrónica','muebles','jardinería')" ) y te devuelve el siguiente string (siguiendo con el ejemplo que has puesto):

"-3,camaradigital,electronica-7,modem,electronica-8,parlante,electronica-10,silla,muebles-13,mesa,muebles..."

Código:
drop function if exists categorias;

delimiter $$

create function categorias (cat1 varchar(20), cat2 varchar(20), cat3 varchar(20)) returns varchar(500)
    begin 
        declare i int default 0;
        declare texto varchar(500) default '';
        declare semi_texto varchar(100) default '';
        
        repeat
            select id_articulo_categoria into semi_texto from articulo_categoria where categoria=cat1 limit i,1;
            select concat(texto,'-',semi_texto) into texto;
            select nombre into semi_texto from articulo_categoria where categoria=cat1 limit i,1;
            select concat(texto,',',semi_texto) into texto;
            select categoria into semi_texto from articulo_categoria where categoria=cat1 limit i,1;
            select concat(texto,',',semi_texto) into texto;
            set i=i+1;
            until i>=3 end repeat;
            set i=0;
            
            repeat
            select id_articulo_categoria into semi_texto from articulo_categoria where categoria=cat2 limit i,1;
            select concat(texto,'-',semi_texto) into texto;
            select nombre into semi_texto from articulo_categoria where categoria=cat2 limit i,1;
            select concat(texto,',',semi_texto) into texto;
            select categoria into semi_texto from articulo_categoria where categoria=cat2 limit i,1;
            select concat(texto,',',semi_texto) into texto;
            set i=i+1;
            until i>=3 end repeat;
            set i=0;
            
            repeat
            select id_articulo_categoria into semi_texto from articulo_categoria where categoria=cat3 limit i,1;
            select concat(texto,'-',semi_texto) into texto;
            select nombre into semi_texto from articulo_categoria where categoria=cat3 limit i,1;
            select concat(texto,',',semi_texto) into texto;
            select categoria into semi_texto from articulo_categoria where categoria=cat3 limit i,1;
            select concat(texto,',',semi_texto) into texto;
            set i=i+1;
            until i>=3 end repeat;
            set i=0;

        return texto;
    
    end$$
    
    delimiter ;
(¿A que da a los ojos mirarla?) Nose si esto tiene una aplicación práctica la verdad, pero bueno si te sirve... Luego ese string lo podrías hacer lonchas y utilizarlo. Pero bueno... Ya me contarás que te parece.

¡Un saludo!

Última edición por davikt; 09/05/2012 a las 14:28
  #3 (permalink)  
Antiguo 09/05/2012, 14:47
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 17 años, 9 meses
Puntos: 16
Respuesta: Agrupar y mostrar hasta 3 registros por categoria

gracias davikt, se ajusta bastante. Yo habia planeado hacer algo parecido. Varios select con UNION, lo que seria algo muy similar. Voy a ver si me sale.

Etiquetas: agrupar, registros, select, tabla, categorias
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:39.