10. april 2006 - 15:40Der er
28 kommentarer og 2 løsninger
Flere ralationer fra én tabel
Hejsa.
Jeg sidder med en db, hvori jeg har en tabel med en række med talkoder, og og en række med en værdi i en ny række. Altså f.eks sådan her.
1 1 10 X 1024 F osv
Jeg har så en tabel hvor jeg har en masse rækker med disse talkoder, i alt 21 rækker. Hvordan laver jeg dette på bedste performance mæssige måde. Jeg har prøvet blot at lave 21 ralationer, men dette tager jo en evighed at "loade". Kan dette ikke laves smartere?
Ved godt det måske ikke er den bedste forklaring, men skriv et indlæg med din mail-adresse, så skal jeg sende db'en til dig, så du kan se det helt nøjagtigt.
Jeg har 2 tabeller. Én med 2 rækker. "Talkode" og "Værdi" Én med 21 rækker, som hedder [slag1], [Slag2] osv., som altså er med talkoderne Her skal jeg have en forespørgsel, som omdanner disse talkoder til "Værdi"-feltet
table Talkoder Talkode Number (Primary key) Resultat Text
table RESULTAT PK Autonumber id number salg1 Number (foreign key relationships with Talkoder.Talkode) salg2 Number (foreign key relationships with Talkoder.Talkode) salg3 Number (foreign key relationships with Talkoder.Talkode) . . . salg21 Number (foreign key relationships with Talkoder.Talkode)
The SQL Lars uses is SELECT RESULTAT.id, Talkoder.Resultat AS [1-1], Talkoder_1.Resultat AS [1-2], Talkoder_2.Resultat AS [2-1], Talkoder_3.Resultat AS [2-2], Talkoder_4.Resultat AS [3-1], Talkoder_5.Resultat AS [3-2], Talkoder_6.Resultat AS [4-1], Talkoder_7.Resultat AS [4-2], Talkoder_8.Resultat AS [5-1], Talkoder_9.Resultat AS [5-2], Talkoder_10.Resultat AS [6-1], Talkoder_11.Resultat AS [6-2], Talkoder_12.Resultat AS [7-1], Talkoder_13.Resultat AS [7-2], Talkoder_14.Resultat AS [8-1], Talkoder_15.Resultat AS [8-2], Talkoder_16.Resultat AS [9-1], Talkoder_17.Resultat AS [9-2], Talkoder_18.Resultat AS [10-1], Talkoder_19.Resultat AS [10-2], Talkoder_20.Resultat AS [10-3] FROM Talkoder AS Talkoder_20 INNER JOIN (Talkoder AS Talkoder_19 INNER JOIN (Talkoder AS Talkoder_18 INNER JOIN (Talkoder AS Talkoder_17 INNER JOIN (Talkoder AS Talkoder_16 INNER JOIN (Talkoder AS Talkoder_15 INNER JOIN (Talkoder AS Talkoder_14 INNER JOIN (Talkoder AS Talkoder_13 INNER JOIN (Talkoder AS Talkoder_12 INNER JOIN (Talkoder AS Talkoder_11 INNER JOIN (Talkoder AS Talkoder_10 INNER JOIN (Talkoder AS Talkoder_9 INNER JOIN (Talkoder AS Talkoder_8 INNER JOIN (Talkoder AS Talkoder_7 INNER JOIN (Talkoder AS Talkoder_6 INNER JOIN (Talkoder AS Talkoder_5 INNER JOIN (Talkoder AS Talkoder_4 INNER JOIN (Talkoder AS Talkoder_3 INNER JOIN (Talkoder AS Talkoder_2 INNER JOIN (Talkoder AS Talkoder_1 INNER JOIN (Talkoder INNER JOIN RESULTAT ON Talkoder.Talkode = RESULTAT.slag1) ON Talkoder_1.Talkode = RESULTAT.slag2) ON Talkoder_2.Talkode = RESULTAT.slag3) ON Talkoder_3.Talkode = RESULTAT.slag4) ON Talkoder_4.Talkode = RESULTAT.slag5) ON Talkoder_5.Talkode = RESULTAT.slag6) ON Talkoder_6.Talkode = RESULTAT.slag7) ON Talkoder_7.Talkode = RESULTAT.slag8) ON Talkoder_8.Talkode = RESULTAT.slag9) ON Talkoder_9.Talkode = RESULTAT.slag10) ON Talkoder_10.Talkode = RESULTAT.slag11) ON Talkoder_11.Talkode = RESULTAT.slag12) ON Talkoder_12.Talkode = RESULTAT.slag13) ON Talkoder_13.Talkode = RESULTAT.slag14) ON Talkoder_14.Talkode = RESULTAT.slag15) ON Talkoder_15.Talkode = RESULTAT.slag16) ON Talkoder_16.Talkode = RESULTAT.slag17) ON Talkoder_17.Talkode = RESULTAT.slag18) ON Talkoder_18.Talkode = RESULTAT.slag19) ON Talkoder_19.Talkode = RESULTAT.slag20) ON Talkoder_20.Talkode = RESULTAT.slag21;
Forstår lidt mere nu, men ikke helt. Måske er der en hurtig VBA-løsning. Må jeg også se basen? Min adresse er: hr_dk@hotmail.com. Får dog ikke kigget på det før i slutningen af påsken.
Har nu set i din base, hvor der foruden en tabel med deltagere er en tabel med 2 felter, Talkode og Resultat. Desuden er der en tabel med 21 felter + id-felt(som ikke er et autonummereringsfelt). Dataene i den sidste tabel ser ud til at være talkoder. Har også set forespørgslen.
Spørgsmålet er nu: Hvad er det du gerne vil lave. Skal fx Talkoderne i Resultat-tabellen erstattes med de resultat-data som svarer til talkoderne i tabellen Talkode/Resultat? Hvis det er det du vil, så er det let at lave en funktion, som gør det.
Har desværre haft travlt med et større projekt i min fritid men her er mit svar:
Hvis du i din tabel RESULTAT tilføjer lige så mange felter som der er slag, dvs res1, res2 osv kan du lave en Opdateringsforespørgsel for alle resultater med følgende kriterium: DLookUp("[Resultat]";"Talkoder";"[Talkode] = " & CLng([slag1]))
You could try redesigning yoour dB and maybe havin a third table which I mentioned 13/04-2006 09:54:5. This will reduce the number of JOINS needed (or dlookup) and may also speed things up, but there is no guaranty. In my opinion having a third table is alos the correct way to do things, it allows adding "Rækker" without having to add new fields to the tables.
Jeg har prøvet at køre den på 1 af felterne, og den er ca 4 minutter om at afvikle bare den ene forespørgsel, så jeg er bange for den heller ikke holder, desværre...
Hos mig ta'r det under 1 sekund at køre forespørgslen. Men, men ..... der er noget helt galt med den base jeg fik tilsendt. Prøvede først at lave en opdateringsformular. Men det var umuligt. Der dukkede hele tiden et objekt med navnet "2" op, som jeg ikke kunne se nogen steder. Jeg så også navnet "Viking" i VBA. Det plejer at betyde, at den originale base engang har haft dette navn.
Kopierede derefter tabellerne til en helt ny base.
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.