ordre sql

This commit is contained in:
2025-10-14 22:28:15 +02:00
parent 1311068103
commit 94b69bb041
12 changed files with 22 additions and 12 deletions

View File

@@ -0,0 +1,49 @@
alter table famille
add column gauche int,
add column droite int;
-- fonction auxiliaire récursive : reçoit le compteur 'n', retourne le compteur mis à jour
CREATE OR REPLACE FUNCTION set_bounds(p_code text, n INT)
RETURNS INT AS $$
DECLARE
child RECORD;
BEGIN
-- left
UPDATE famille SET gauche = n WHERE code = p_code;
n := n + 1;
-- parcours des enfants
FOR child IN
SELECT code FROM famille WHERE code_parent = p_code ORDER BY code
LOOP
n := set_bounds(child.code, n);
END LOOP;
-- right
UPDATE famille SET droite = n WHERE code = p_code;
n := n + 1;
RETURN n;
END;
$$ LANGUAGE plpgsql;
-- fonction principale : initialise et lance la reconstruction
CREATE OR REPLACE FUNCTION rebuild_nested_sets()
RETURNS VOID AS $$
DECLARE
root RECORD;
n INT := 1;
BEGIN
-- remise à zéro (optionnel)
UPDATE famille SET gauche = NULL, droite = NULL;
-- pour chaque racine
FOR root IN
SELECT code FROM famille WHERE code_parent IS NULL ORDER BY code
LOOP
n := set_bounds(root.code, n);
END LOOP;
END;
$$ LANGUAGE plpgsql;
SELECT rebuild_nested_sets();