Jose Luis Balle wrote:
Lo Prometido. La tabla: CREATE TABLE items ( id serial NOT NULL, padre bigint NOT NULL, nombre character varying(300) NOT NULL, descripcion text, CONSTRAINT items_pkey PRIMARY KEY (id) ) WITH (OIDS=TRUE);La función, en realidad como recursiva, tantas veces como sea necesario hasta llegar a la última hoja -1 que es la hoja en sí, el registro. CREATE OR REPLACE FUNCTION getancestor(este character varying, item integer) RETURNS character varying AS $BODY$ DECLARE retorno integer; BEGIN SELECT padre INTO retorno FROM items WHERE id=item; IF NOT FOUND OR retorno=0 THEN return este; ELSE return getancestor(retorno::varchar||'.'||este,retorno); END IF; END; $BODY$ LANGUAGE 'plpgsql' STABLE COST 100; ALTER FUNCTION getancestor(character varying, integer) OWNER TO user; Y no anda tan mal, 391ms sobre 1678 filas, lo que en realidad me toma mucho tiempo es una vista que me sumariza cada hoja del árbol Seq Scan on items (cost=0.00..480.28 rows=1678 width=159) En fin, no se si es lo mejor pero por ahora me sirve. Voy a investigar tu recomendación Alvaro, gracias. Saludos El día 27 de octubre de 2009 23:00, Alvaro Herrera <[email protected]> escribió:
Gracias por la respuesta Jose Luis, casi lo he comprendido todo, solo me resta la parte de darme cabezazos intentando realizarlo. Ahora, va sonar un poco mal en este ámbito y quizás me quieran matar, pero me han pedido que no sea PostgreSQL sino que sea MySQL ¿alguna idea al respecto? ¿es el mismo basamento?
-- Saludos ReynierPM -- TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda
