Avatar billede gnuen_fra Nybegynder
09. august 2005 - 13:18 Der er 32 kommentarer og
1 løsning

udskriv kun id en gang

Jeg har følgende kode som skal skrive nogle spørgsmål til brugeren med to eller flere svarmuligheder. Mit spørgsmål er om der er en der kan fortælle mig hvordan jeg undgår at udskrive spørgsmålet mere end en gang.

På forhånd tak for hjælpen.

<%
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT spoergsmaal.*, svar.* FROM svar INNER JOIN (spoergsmaal INNER JOIN spmsvar ON spoergsmaal.spmid = spmsvar.spmid) ON svar.svarid = spmsvar.svarid", database,3,1,1

response.write ("<form method=get action=resultat.asp>")
response.write ("<table align=center width=300px class=style>")

antal = rs.RecordCount
response.write(antal)

If rs.eof AND rs.bof Then
response.write ("<tr><td valign=top>Der er ingen spørgsmål</td></tr>")
else
spm_count = 0

rs.MoveFirst
do while not rs.eof

spmid = rs("spmid")
spm = rs("spoergsmaal")
svar = rs("svar")

response.write (spm)

response.write ("<input type=radio name=" & spmid & "value=1>")
response.write (svar)

rs.MoveNext
loop
end if
<!--Lukker databasen-->
database.Close
Set database = Nothing
%>
Avatar billede busschou Praktikant
09. august 2005 - 13:30 #1
Så skal du nok have noget med "Distinct spmid" med i din sql
Avatar billede neess Nybegynder
09. august 2005 - 13:37 #2
eller group by spmid til sidst i din sql sætning.
Avatar billede gnuen_fra Nybegynder
09. august 2005 - 13:45 #3
nu har jeg nørklet lidt med det er kommet frem til denne sql:

rs.Open "SELECT spoergsmaal.spoergsmaal, svar.svar, spmsvar.spmid FROM svar INNER JOIN (spoergsmaal INNER JOIN spmsvar ON spoergsmaal.spmid = spmsvar.spmid) ON svar.svarid = spmsvar.svarid group by spoergsmaal", database,3,1,1

og får denne fejlmeddlelse:
Du har forsøgt at køre en forespørgsel, der ikke medtager det angivne udtryk "svar" som en del af en aggregatfunktion.

Hvad betyder det?
Avatar billede busschou Praktikant
09. august 2005 - 13:51 #4
når du laver group by så skal den jo have noget at forholde sig til
Derfor skal du lave group by på alle de felter du selecter så den ved i hvilken rækkefølge du skal gøre det
Avatar billede busschou Praktikant
09. august 2005 - 13:52 #5
rs.Open "SELECT spoergsmaal.spoergsmaal, svar.svar, spmsvar.spmid FROM svar INNER JOIN (spoergsmaal INNER JOIN spmsvar ON spoergsmaal.spmid = spmsvar.spmid) ON svar.svarid = spmsvar.svarid group by spoergsmaal.spoergsmaal, svar.svar", database,3,1,1
--'
Så bliver de først grupperet efter spørgsmål, dernæst svar
Avatar billede neess Nybegynder
09. august 2005 - 13:59 #6
eller lave en anden form for sortering af felterne. Kan være min() max() Der skal bare sættes et kriterie til hvert felt.
Avatar billede gnuen_fra Nybegynder
09. august 2005 - 13:59 #7
hmm... med denne sql:
rs.Open "SELECT spoergsmaal.spoergsmaal, spoergsmaal.spmid, svar.svar, spmsvar.spmid FROM svar INNER JOIN (spoergsmaal INNER JOIN spmsvar ON spoergsmaal.spmid = spmsvar.spmid) ON svar.svarid = spmsvar.svarid GROUP BY spoergsmaal.spoergsmaal, svar.svar", database,3,1,1

siger den:
Du har forsøgt at køre en forespørgsel, der ikke medtager det angivne udtryk "spmid" som en del af en aggregatfunktion.
Avatar billede busschou Praktikant
09. august 2005 - 14:01 #8
ahh jeg så ikke der var tre og nu har du vist også fire
Alt du har efter din SELECT skal du også have efter din GROUP BY
Det er derfor den brokker sig
Avatar billede busschou Praktikant
09. august 2005 - 14:02 #9
eksempel
Select et, to, tre From tabel Group By et, to, tre
De skal alle med :o)
Avatar billede gnuen_fra Nybegynder
09. august 2005 - 14:05 #10
okay... den brokker sig ikke nu. men... jeg får stadig udskrevet spørgsmålet hver gang.  :o)
Avatar billede busschou Praktikant
09. august 2005 - 14:08 #11
mon denne her virker
----
rs.Open "SELECT spoergsmaal.spoergsmaal, svar.svar, spmsvar.spmid, DISTINCT spoergsmaal.spmid FROM svar INNER JOIN (spoergsmaal INNER JOIN spmsvar ON spoergsmaal.spmid = spmsvar.spmid) ON svar.svarid = spmsvar.svarid", database,3,1,1
Avatar billede busschou Praktikant
09. august 2005 - 14:08 #12
altså sætte DISTINCT på den af de fire som du ønsker skal være unik
Avatar billede gnuen_fra Nybegynder
09. august 2005 - 14:13 #13
hmm... nu siger den så:

Der er en ikke-defineret funktion "DISTINCT" i udtrykket.
Avatar billede busschou Praktikant
09. august 2005 - 14:18 #14
øhh ok det ved jeg ikke hvorfor den siger for det er jo ganske normal syntaks at skrive
Select Distinct kollonne From tabel
:o/ hmm
Avatar billede gnuen_fra Nybegynder
09. august 2005 - 14:25 #15
ja det er pænt underligt... jeg sidder selv og kigger efter om det er skrevet rigtigt. Og efter hvad jeg kan se er det rigtigt skrevet.
Avatar billede neess Nybegynder
09. august 2005 - 14:25 #16
Hvis du har flere svar til et spørgsmål vil du altid få spørgsmålet 2 gange. Med mindre du kun vil trække et svar ud.
Avatar billede busschou Praktikant
09. august 2005 - 14:29 #17
neess >> ja, men hvis den slet ikke genkender ordet DISTINCT, så må der da være noget andet galt
Avatar billede neess Nybegynder
09. august 2005 - 14:31 #18
desticnt kan den ikke kun bruges hvis du selecter et felt.
Avatar billede gnuen_fra Nybegynder
09. august 2005 - 14:32 #19
Det gør den, DESTINCT skal defineres hvad den så mener med det...
Avatar billede busschou Praktikant
09. august 2005 - 14:34 #20
njaa men det er muligt at den skal virke på alle dem man har valg
Select Dinstinct * From tabel
Er muligt i nogen databaser
Men så ser den jo selvfølgelig også samlet på alle fire værdier
Avatar billede neess Nybegynder
09. august 2005 - 14:37 #21
Select Dinstinct * From shop_vare
Den virker ikke på mysql.
Avatar billede busschou Praktikant
09. august 2005 - 14:39 #22
haha
Uanset hvad skal vi så ikke blive enige om et
Dinstinct og Destinct er forkert
Det rigtige er "Distinct"
Avatar billede busschou Praktikant
09. august 2005 - 14:41 #23
Du kunne prøve at sætte det forest
--
rs.Open "SELECT Distinct spoergsmaal.spoergsmaal, svar.svar, spmsvar.spmid, spoergsmaal.spmid FROM svar INNER JOIN (spoergsmaal INNER JOIN spmsvar ON spoergsmaal.spmid = spmsvar.spmid) ON svar.svarid = spmsvar.svarid", database,3,1,1
--
hvis det "trigger" at den så vælger distinct på alle felter
Men jeg er snart løbet tør for gode ideer desværre
Avatar billede busschou Praktikant
09. august 2005 - 14:42 #24
min sidste gode forslag er at du spørger i access kategorien,
Der sidder en masse "hajer" som ved alt om access jo, og de kan sikker snildt skrue det rigtig sammen :o)
Avatar billede neess Nybegynder
09. august 2005 - 14:45 #25
hvorfor ikke bare lave det i 2 løkker. En der hiver spørgsmålet frem, og herefter udskriver de spm som høre til ?
Avatar billede gnuen_fra Nybegynder
09. august 2005 - 14:46 #26
hmm... Det eneste det resulterede i er at det blev vist i omvendt rækkefølge.
Jeg er også selv løbet tør får gode idéer og vil lade et ligge lidt.

Men skulle nogen komme med en genial idé er de mere end velkommen tíl at skrive

:o)

Tak for hjælpen selv om det ikke lykkedes
Avatar billede gnuen_fra Nybegynder
09. august 2005 - 14:48 #27
hey... den lyder god den med løkkerne...

Mit hoved er fyldt med sql. er du ikke rar at give et eksempel?
Avatar billede neess Nybegynder
09. august 2005 - 14:48 #28
hvis det kun er i forkert rækkefølge skal du have en order by felt ASC eller DESC ind til sidst
Avatar billede neess Nybegynder
09. august 2005 - 14:50 #29
først select * from spm.
laver du din while løkke
og så en sql sætning mere
select * from svar where spmid=rs("id")
Avatar billede gnuen_fra Nybegynder
09. august 2005 - 14:51 #30
jo men jeg får stadig udskrevet spørgsmålene hver gang. Så kan jeg lige så godt fjerne Distinct igen.
Avatar billede busschou Praktikant
09. august 2005 - 14:53 #31
løkken er fin nok , og hvis du kan få den til at virke så efter din hensigt så er det fint
Jeg vil alligevel foreslåg dig at evt stillle spørgsmålet i access kategorien
Perfomance er langt langt bedre hvis det hele stykkes sammen i et sql udtryk
Avatar billede gnuen_fra Nybegynder
09. august 2005 - 14:59 #32
Lader det lige ligge for i dag

Takker for den gode hjælp!
Avatar billede gnuen_fra Nybegynder
10. august 2005 - 09:27 #33
Så fik jeg løst problemet...
Lavede om på db så jeg fik spmid med i svar-tabellen. Min kode kom til at se sådan her ud hvis andre skulle sidde med samme problem:

Set rs1 = Server.CreateObject("ADODB.Recordset")
rs1.Open "SELECT * FROM spoergsmaal", database,3,1,1


If rs1.eof AND rs1.bof Then
response.write ("Der er ingen spørgsmål)
else
spm_count = 0

rs1.MoveFirst
DO UNTIL rs1.eof

spmid = rs1("spmid")
spm = rs1("spoergsmaal")

response.write (spm)

'viser svarmulighederne
Set rs2 = Server.CreateObject("ADODB.Recordset")
rs2.Open "SELECT * FROM svar WHERE svar.spmid ="&rs1("spmid"), database,3,1,1

rs2.MoveFirst
DO UNTIL rs2.eof

svar = rs2("svar")


response.write ("<input type=radio name=" & spmid & "value=1>")

response.write (svar)

rs2.MoveNext
loop

rs1.MoveNext
loop
end if

<!--Lukker databasen-->
database.Close
Set database = Nothing
%>
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