Avatar billede pierrehusted Nybegynder
14. oktober 2002 - 23:31 Der er 7 kommentarer og
2 løsninger

Søgning nedad i krav

Nu har jeg siddet i flere timer og forsøgt, men jeg kan bare ikke få det til at virke  :-(


Jeg har to tabeller til et karaktersystem til Liverollespil: en med poster med evner, og en anden med krav til de evner.

Hver evne kan have et uendeligt antal krav (en anden evne).
De evner der er krav kan selv have krav.

Hvordan laver jeg en SQL sætning, som tager det evneid man giver og finder alle krav til denne evne og krav til disse krav og krav til disse krav og krav til disse krav.....

F.eks. kræver "Styrke 3" at man har "Styrke 2" som igen kræver at man har "Styrke 1".


Tabel 1 : Evne
id          navn                                             
----------- --------------------------------------------------
1          Små våben
2          Våben
3          To-håndsvåben
4          To våben
5          Kaste våben
6          Bue
7          Bonk
8          Backstab
9          Førstehjælp
10          6. sans
11          Jernvilje 1
12          Jernvilje 2
13          Styrke 1
14          Styrke 2
15          Styrke 3
16          Styrke 4
17          Styrke 5
18          Styrke 6
19          Styrke 7
20          Styrke 8
21          Styrke 9



Tabel 2 : Evne_krav
id          evneid      kravid     
----------- ----------- -----------
1          2          1
2          3          2
3          5          1
4          8          7
5          12          11
6          12          10
7          14          13
8          15          14
9          16          15
10          17          16
11          18          17
12          19          18
13          20          19
14          21          20
Avatar billede lasse_buck Nybegynder
15. oktober 2002 - 00:36 #1
Det er et rekursivt kald, og det understøtter SQL mig bekendt ikke.

Hvis du kan sætte en grænse for antallet af led, så kan du lave en tilsvarende forespørgsel, hvor du joiner tabellen Evne_krav med sig selv n gange.
Avatar billede lasse_buck Nybegynder
15. oktober 2002 - 00:47 #2
Alternativt indlæser du begge tabeller helt og beregner dine lister en gang for alle i dit program.

Du kan også vedligeholde en tredie tabel, som indeholder alle direkte og indirekte afhængigheder:
id    evneid    kravid
--------------------------
1    2    1
2    3    2
3    3    1
4    5    1
5    8    7
6  12  11
7  12  10
8  14  13
9  15  14
10  15  13
11  16  15
12  16  14
13  16  13
.
.
.
Avatar billede ocp Nybegynder
15. oktober 2002 - 10:15 #3
Man kan da sagtens lave noget rekursivt - jeg vender lige tilbage senere.
Avatar billede pierrehusted Nybegynder
15. oktober 2002 - 10:20 #4
Glæder mig.....
Avatar billede lasse_buck Nybegynder
15. oktober 2002 - 11:14 #5
Man kan lave det i en procedure. Jeg gæder mig til at se det i en sql-sætning.
Avatar billede pierrehusted Nybegynder
15. oktober 2002 - 11:19 #6
Lasse, det behøver ikke være en SQL sætning. Bare jeg kan få skudt det af fra IIS/ASP.
Avatar billede ocp Nybegynder
15. oktober 2002 - 13:28 #7
create proc EvneForudsaetninger( @evneid as int )
as
declare @kravid int
declare @evne varchar(50)

select @kravid = kravid from evne_krav where evneid = @evneid

create table #tmp (evne varchar(50))

while not (@kravid is null)
begin
  select @evne = navn from evne where id = @kravid
    insert into #tmp values( @evne )
    set @evneid = @kravid
    set @kravid = null
    select @kravid = kravid from evne_krav where evneid = @evneid
end

select * from #tmp

drop table #tmp
Avatar billede pierrehusted Nybegynder
15. oktober 2002 - 13:32 #8
Lidt til Lasse for en god idé og det meste til OCP for en løsning.

TAK!!!!
Avatar billede lasse_buck Nybegynder
15. oktober 2002 - 13:40 #9
Meget fair - tak for point.
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
Kategori
Computerworld tilbyder specialiserede kurser i database-management

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