Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/05/2012, 13:11
davikt
 
Fecha de Ingreso: mayo-2012
Mensajes: 42
Antigüedad: 12 años
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