Avatar billede axkris Nybegynder
21. januar 2004 - 15:39 Der er 4 kommentarer og
1 løsning

Fejl ved optimering af sql-forspørgsel

Hej

Jeg har to forespørgsler, som virker fint:
strQuery="SELECT PlusprofilID from PLUSPROFIL_KATEGORIER left join PLUSPROFIL_ANNONCER on PLUSPROFIL_KATEGORIER.PlusprofilID = PLUSPROFIL_ANNONCER.ID WHERE KategoriID = " & trim(request.queryString("ID") & " ORDER BY PLUSPROFIL_ANNONCER.Visninger")
Set rs=dataConn.Execute(strQuery)
   
strQuery="SELECT DISTRICT * FROM PLUSPROFIL_ANNONCE where PlusprofilID = " & rs("PlusprofilID")
Set rs=dataConn.Execute(strQuery)

Men jeg vil meget gerne have dem kørt samme i en forespørgsel, så derfor forsøgte jeg med:

strQuery="SELECT DISTINCT * FROM PLUSPROFIL_ANNONCE AS PPA1 left join PLUSPROFIL_ANNONCE AS PPA2 on PPA1.PlusprofilID = PPA2.ID WHERE PPA1.KategoriID = " & trim(request.queryString("ID")) & " ORDER BY PPA1.Visninger"

Men den bliver ved med at sige at:
'PPA1.KategoriID' in 'where clause'
eller
'PPA2.KategoriID' in 'where clause

Og så tænkte jeg, at det sikkert var fordi forespørgslen var opbygget forkert.... eller hvad?
21. januar 2004 - 15:47 #1
hmm, det er lidt svært at gennemskue, men jeg kan se at der må være nogle problemer med datatyperne idet trim(request.queryString("ID")) returnerer en tekststreng.
Prøv denne:
strQuery="SELECT DISTINCT * FROM PLUSPROFIL_ANNONCE AS PPA1 left join PLUSPROFIL_ANNONCE AS PPA2 on PPA1.PlusprofilID = PPA2.ID WHERE PPA1.KategoriID = " & val(trim(request.queryString("ID"))) & " ORDER BY PPA1.Visninger"
21. januar 2004 - 15:57 #2
nej, der er mere galt end det....men jeg kan ikke helt gennemskue hvad du vil. Det er jo den samme tabel, som du joiner med sig selv!?
Hvad blev der af PLUSPROFIL_KATEGORIER??
Avatar billede axkris Nybegynder
21. januar 2004 - 17:13 #3
Der er intet galt med: request.queryString("ID")

Ok, glemt alt hvad jeg har skrevet :-D

Der er blevet klikket på et menupunkt, og nu skal de plusprofiler (annoncer), som er koblet til menupunktet, findes. Og iblandt disse plusprofiler, skal der findes den, som har haft mindst visninger:

strQuery="SELECT DISTRICT PlusprofilID from PLUSPROFIL_KATEGORIER left join PLUSPROFIL_ANNONCER on PLUSPROFIL_KATEGORIER.PlusprofilID = PLUSPROFIL_ANNONCER.ID WHERE KategoriID = " & trim(request.queryString("ID") & " ORDER BY PLUSPROFIL_ANNONCER.Visninger")
Set rs=dataConn.Execute(strQuery)

Når den er fundet, så skal den bare vises.
   
strQuery="SELECT * FROM PLUSPROFIL_ANNONCE where PlusprofilID = " & rs("PlusprofilID")
Set rs=dataConn.Execute(strQuery)

Og det virker fint - ingen problemer - MEN kunne man ikke bare gøre det i et hug (en forespørgsel)?
Avatar billede axkris Nybegynder
21. januar 2004 - 17:34 #4
Jeg beklager mange gange, men har har lavet en fejl (jeg overså dit spg. vedr. hvor "plusprofil_annoncer" var blevet af... men det var en skrive fejl. Prøver igen:

strQuery="SELECT PlusprofilID from PLUSPROFIL_KATEGORIER left join PLUSPROFIL_ANNONCE on PLUSPROFIL_KATEGORIER.PlusprofilID = PLUSPROFIL_ANNONCE.ID WHERE KategoriID = " & trim(request.queryString("ID") & " ORDER BY PLUSPROFIL_ANNONCE.Visninger")
Set rs=dataConn.Execute(strQuery)
 
if not rs.eof then   
    strQuery="SELECT * FROM PLUSPROFIL_ANNONCE where PlusprofilID = " & rs("PlusprofilID")
    Set rs=dataConn.Execute(strQuery)
end if

Og det virker - har lige test, men kan det ikke optimeres til en forespørgsel?
Avatar billede axkris Nybegynder
23. januar 2004 - 14:18 #5
Slukker og lukker - tak for forsøget :)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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