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!