Avatar billede rude Nybegynder
06. december 2006 - 23:28 Der er 2 kommentarer og
1 løsning

Kontrol mod cirkulær reference

Jeg har behov for en kontrolfunktion i en stykliste tabel.

Et eksempel:

Tabel stykliste
id | vare_id | indgaar_i | antal
--------------------------------
1 |      1 |        2 |    3
2 |      1 |        3 |    1
3 |      2 |        3 |    2
4 |      3 |        1 |    1     

vare_id er varens id
indgaar_i er vare_id på den vare som varen indgår i

i ovennævnte eksempel er der en cirkulær reference idet vare 3 indgår i vare 1 som indgår i vare 3 via vare 2
Det må ikke kunne ske.
Jeg har en php rutine som fungerer, men med 30.000 poster er det alt for langsomt.
Bemærk at jeg er SQL novice.
Avatar billede Slettet bruger
06. januar 2007 - 10:15 #1
Det kan du ikke definerer deklarativt i SQL så du skal bruge noget proceduralt, så som den PHP rutine du har nu. Det du kan overveje er at implementerer det som en stored-procedure i PostgreSQL og dermed undgå mange round-trips til database, hvis det er det som får din PHP rutine til at køre langsomt.
Avatar billede rude Nybegynder
15. januar 2007 - 20:49 #2
Kan du give et eksempel på hvordan man implementerer en stored-procedure?
Avatar billede Slettet bruger
16. januar 2007 - 05:22 #3
Du skal checke om du har et procedure sprog installeret: http://www.postgresql.org/docs/8.0/interactive/xplang.html

Højest sandsynligt har du PL/pgSQL, som ligner oracle stored-procedures lidt, hvis det giver dig noget. Se på http://www.postgresql.org/docs/8.0/interactive/plpgsql.html for eksempler.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester