From: | Diego Gil <diego(at)adminsa(dot)com> |
---|---|
To: | Claudia Villa <cvilla75(at)hotmail(dot)com> |
Cc: | PostgreSQL Spanish <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: como manejar selects recursivos? |
Date: | 2005-02-28 21:56:06 |
Message-ID: | 1109627766.5219.14.camel@roadwarrior.adminsa.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Claudia:
Hay quienes arman estos arboles con "nested sets". Busca mas sobre esto
en google. A mi me parece un poco complicado.
Por otro lado, podes hacer una funcion que haga el trabajo recursivo.
Por ejemplo, la siguiente funcion retorna el "path" o nombre completo de
una categoria dado un codigo numerico.
Dada la tabla :
CREATE TABLE subjects
(
subject_id int4 NOT NULL,
subject_name varchar(60),
subject_parent int4,
CONSTRAINT subjects_pk PRIMARY KEY (subject_id),
CONSTRAINT subjects_subject_parent_fk FOREIGN KEY (subject_parent)
REFERENCES subjects (subject_id) ON UPDATE RESTRICT ON DELETE RESTRICT
)
WITHOUT OIDS;
esta es la funcion recursiva :
CREATE OR REPLACE FUNCTION full_subject_name(int4)
RETURNS "varchar" AS
$BODY$
DECLARE v_subject_id ALIAS FOR $1;
DECLARE tmp_record RECORD;
DECLARE tmp_id VARCHAR;
DECLARE tmp_name VARCHAR;
BEGIN
tmp_name:='';
SELECT INTO tmp_record * FROM subjects WHERE subjects.subject_id
= v_subject_id;
IF NOT FOUND THEN
RETURN ''::varchar;
END IF;
IF tmp_record.subject_name = NULL THEN
RETURN tmp_record.subject_name;
END IF;
tmp_id := full_subject_name(tmp_record.subject_parent);
IF tmp_record.subject_name IS NOT NULL THEN
tmp_name := tmp_id::varchar || '/' ||
tmp_record.subject_name::varchar || '';
END IF;
RETURN tmp_name;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
Espero que te sirva como base para resolver tu inquietud.
Diego.
El lun, 28-02-2005 a las 13:41 -0600, Claudia Villa escribió:
> necesito hacer una consulta recursiva,
> tengo la siguiente tabla:
>
> SELECT id,id_padre,nombre from temas;
> id |id_padre| nombre
> ----+---------- +--------------
> 1 | | Tema 1
> 2 | 1 | Sub Tema 1
> 3 | 1 | Sub Tema 2
> 4 | 2 | Sub Tema 1.1
>
> como hacer para que me muestre todos los hijos de un tema , incluyendo los
> hijos de los hijos?
>
> alguien ya ha hecho algo similar?
>
> ojala y alguien pueda ayudarme....
> gracias de antemano.
>
> _________________________________________________________________
> Platica con tus amigos en linea con T1msn Messenger
> http://messenger.t1msn.com.mx/
>
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 10: visita nuestro canal de IRC #postgresql-es en irc.freenode.net
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | gonzalo sáenz | 2005-02-28 22:01:48 | Re: como manejar selects recursivos? |
Previous Message | Ivan Figueroa | 2005-02-28 21:50:23 | Re: Usuario para backup en Windows 2003 |