sábado, 10 de enero de 2009
Listar las hojas de un arbol a partir de un nodo
Si tengo una tabla arbol y deseo listar solo los nodos hojas a partir de un nodo raiz, puedo utilizar la funcion que presento a continuacion, si se selecciona un nodo hoja, se mostrara a si mismo, pero no se mostraran nodos padres
POSTGRES SQL
CREATE OR REPLACE FUNCTION listar_hijos(_tabla text, _id_campo text
, _id_padre text, _id integer, _where text) RETURNS text AS $$
------------------------
-- Autor: Luis Jordan P.
------------------------
declare
_sql text;
_bucle record;
_i integer;
_ids text;
begin
_sql := '
SELECT a.' || _id_campo || ' as id FROM '|| _tabla ||' a, '|| _tabla ||' b
WHERE a.'|| _id_padre ||' = b.'|| _id_campo ||'
AND b.' || _id_campo || ' = ' || _id
|| _where;
raise notice 'sql:%',_sql;
_i:=0;
_ids := '';
for _bucle in
execute _sql
loop
_i:=_i+1;
if (_id <> _bucle.id) then
_ids := _ids || (SELECT * FROM listar_hijos(_tabla, _id_campo
, _id_padre, _bucle.id, _where));
end if;
end loop;
if (_i = 0) then -- comentar el if si se desea que se incluyan los padres
_ids := _ids || ',' || _id;
end if;
return _ids;
end;
$$ LANGUAGE 'plpgsql' VOLATILE;
--ejemplo con WHERE:
--SELECT listar_hijos('tabla', 'id_campo', 'id_campo_padre', 1, ' AND a.campo=''Luis'' ');
SELECT listar_hijos('tabla', 'id_campo', 'id_campo_padre', 1, ' ');
Resultado:
,4,8,9,6,7
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario