Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> drzewa sql metoda depesza
AcidBurnt
post 22.01.2006, 18:08:35
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 1
Dołączył: 13.04.2003
Skąd: z ławki przed blokiem

Ostrzeżenie: (0%)
-----


witam
w swoim systemie zaimplementowałem http://depesz.com/various-sqltrees-implementation.php dla drzewek

probuje wlasnie napisac f-cje do usuwania i zmiany rodzica na drzewku

i cos nie zabardzo mi wychodzi, tzn usuwanie ma polegac na tym ze zanim
uzytkownik zostanie usuniety z bazy i z drzewa to musi nastapic zmiana
rodzica dla jego dzieci na wybrenego rodzica przez uzytkownika, co za
tym idze cale drzewo podpiete pod niego ma zostac przepiete do nowego
uzytkownika, baza to PostgreSQL 7.4.6

baza wyglada tak:

  1. CREATE TABLE t_connections
  2. (
  3. parent_id int8,
  4. child_id int8,
  5. depth int8,
  6. CONSTRAINT t_connections_user_child_fkey FOREIGN KEY (child_id)
  7. REFERENCES t_users (user_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION,
  8. CONSTRAINT t_connections_user_id_fkey FOREIGN KEY (parent_id)
  9. REFERENCES t_users (user_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION
  10. )
  11.  
  12. CREATE TABLE t_users
  13. (
  14. user_id int8 NOT NULL DEFAULT
  15. NEXTVAL('t_users_user_id_seq'::regclass),
  16. user_parent int8,
  17. user_name char(60),
  18. CONSTRAINT t_users_pkey PRIMARY KEY (user_id),
  19. CONSTRAINT t_users_user_id_key UNIQUE (user_id)
  20. )
  21. WITHOUT OIDS;
  22.  
  23. CREATE TRIGGER add_connections
  24. AFTER INSERT ON t_users
  25. FOR EACH ROW
  26. EXECUTE PROCEDURE add_connections();
  27.  
  28. CREATE OR REPLACE FUNCTION add_connections()
  29. RETURNS "trigger" AS $BODY$DECLARE
  30. BEGIN INSERT
  31. INTO t_connections (parent_id, child_id, depth) VALUES
  32. (currval('t_users_user_id_seq'),currval('t_users_user_id_seq'),0);
  33. IF NEW.user_parent <> currval('t_users_user_id_seq') THEN
  34. INSERT
  35. INTO t_connections (parent_id, child_id, depth) VALUES
  36. (NEW.user_parent, currval('t_users_user_id_seq'), 1);
  37. END IF;
  38. INSERT
  39. INTO t_connections (parent_id, child_id, depth)
  40. SELECT parent_id, currval('t_users_user_id_seq'), depth + 1
  41. FROM t_connections WHERE child_id = NEW.user_parent AND depth > 0;
  42. RETURN NEW;
  43. END;
  44. $BODY$
  45. LANGUAGE 'plpgsql' VOLATILE;
  46. ALTER FUNCTION add_connections() OWNER TO postgres;


z góry dziekuje za pomoc
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:54