Avatar billede bobbedude Nybegynder
20. december 2002 - 09:39 Der er 12 kommentarer og
1 løsning

Join og loop

Jeg har to tabeller jeg gerne vil have joinet

I tabel sporgsmol er spid nøglen
I tabel deltager er spid noglen

jeg vil gerne have skrevet spørgsmol ud som overskrif og vise alle der har deltaget i dette sporgsmol.

Hvis der ikke er nogen deltager til et sporgsmol skal dette ikke vises.
Avatar billede bobbedude Nybegynder
20. december 2002 - 09:54 #1
Jeg lavede dette

Set rs = Connect.Execute("SELECT sporgsmal.*, deltager.* FROM sporgsmal, deltager WHERE sporgsmal.spid=deltager.spid ")


if not rs.EOF then
do until rs.EOF


response.write rs("sporgsmol") &"<br>"
response.write rs("fornavn") &"<br>"

rs.movenext
Loop
else
response.write "<span class='Font2'>Tom</span><br><br>"
end if         


men den skriver Spørgsmål for hver gang der er en vinder
Avatar billede eagleeye Praktikant
20. december 2002 - 10:18 #2
Så kan du lave en SQL som denne der JOIN'er de to tabeller, den medtager kun hvis der er nogle som er ens i begge tabellern så "tomme" spørgsmål ikke kommer med. Den uidskriver også kun rs("sporgsmol") en gang som jeg har vist loopet..:

SQL = "SELECT sporgsmal.*, deltager.* "
SQL = SQL & " FROM deltager INNER JOIN sporgsmal ON deltager.spid = sporgsmal.spid;"

Set rs = Connect.Execute(SQL)

if not rs.EOF then
overskrift = ""
do until rs.EOF
  if overskrift <> rs("sporgsmol") then
    response.write rs("sporgsmol") &"<br>"
    sporgsmol = rs("sporgsmol")
  end if

  response.write " " & rs("fornavn") &"<br>"

  rs.movenext
Loop
else
response.write "<span class='Font2'>Tom</span><br><br>"
end if
Avatar billede bobbedude Nybegynder
20. december 2002 - 10:28 #3
Hey eagleeye Godt at hører fra dig igen

Den skriver ikke sporgsmol ud
Avatar billede bobbedude Nybegynder
20. december 2002 - 10:48 #4
Spørgsmålet bliver ikke vist ???


SQL = "SELECT sporgsmal.*, deltager.* "
SQL = SQL & " FROM deltager INNER JOIN sporgsmal ON deltager.spid = sporgsmal.spid Where deltager.vinder = 'vinder';"

Set rs = Connect.Execute(SQL)

if not rs.EOF then

overskrift = ""

do until rs.EOF

  if overskrift <> rs("sporgsmol") then
    response.write rs("sporgsmol") &"<br>"
    sporgsmol = rs("sporgsmol")
   
  end if

  response.write " " & rs("fornavn") &"<br>"

  rs.movenext
Loop
else
response.write "<span class='Font2'>Tom</span><br><br>"
end if
Avatar billede bobbedude Nybegynder
20. december 2002 - 11:22 #5
Bare du nu ikke sover :ø)
Avatar billede eagleeye Praktikant
20. december 2002 - 13:19 #6
Jeg var lige optaget af noget andet ... Ups jeg har brugt to for skellige variable navne i loopet for det samme ;(
Prøv at lave loopet sådan her:

overskrift = ""

do until rs.EOF

  if overskrift <> rs("sporgsmol") then
    response.write rs("sporgsmol") &"<br>"
    overskrift = rs("sporgsmol")
   
  end if

  response.write " " & rs("fornavn") &"<br>"

  rs.movenext
Loop
Avatar billede eagleeye Praktikant
20. december 2002 - 13:23 #7
Hvis det ikke helt virker så kan det måske være fordi rs("sporgsmol") bliver tom efter den er brugt første gang. Det har jeg set er sket hvis man har nogle kolonner som er defienret som notal og man bruger "SELECT * .." så kan den fejl komme, man skal skrive kolonnenavne som man vi have ud, men det kan laves sådan her så man kopier data fra rs("sporgsmol") ind i en variable....:


overskrift = ""

do until rs.EOF
  sporgsmol = rs("sporgsmol")
  if overskrift <> sporgsmol then
    response.write sporgsmol &"<br>"
    overskrift = sporgsmol   
  end if

  response.write " " & rs("fornavn") &"<br>"

  rs.movenext
Loop
Avatar billede bobbedude Nybegynder
20. december 2002 - 14:22 #8
Oki så kom overskriften med, men den skriver stadig overskriften med ud for hver deltager der er.
Avatar billede eagleeye Praktikant
20. december 2002 - 15:44 #9
Det skulle den eller ikke da dette styk kode skulle tjekke på om den næste overskrift er en ny overskrift..:


  sporgsmol = rs("sporgsmol")
  if overskrift <> sporgsmol then
    response.write sporgsmol &"<br>"
    overskrift = sporgsmol   
  end if
Avatar billede bobbedude Nybegynder
21. december 2002 - 12:15 #10
Jeg tror den gør det fordi at når den looper gennem deltager så ser det sådan ud:

spid = 36
spid = 30
spid = 36
spid = 36
spid = 25

kan det ikke være det, måske skulle der en order by på ?
Avatar billede bobbedude Nybegynder
21. december 2002 - 12:17 #11
yep så virker det tak for hjælpen eagleeye og glædelig jul.
Avatar billede eagleeye Praktikant
21. december 2002 - 12:18 #12
ARh ja det har jeg ikke lige tænkt på prøv at sætte ORDER BY ind sådan her:


SQL = "SELECT sporgsmal.*, deltager.* "
SQL = SQL & " FROM deltager INNER JOIN sporgsmal ON deltager.spid = sporgsmal.spid Where deltager.vinder = 'vinder' ORDER BY sporgsmal.spid;"

Så med eller uden DESC om du vil havde dem med højst spID først.
Avatar billede bobbedude Nybegynder
21. december 2002 - 13:11 #13
det virker bare 100%
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
Kurser inden for grundlæggende programmering

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