21. januar 2004 - 15:39Der 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?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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"
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??
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)?
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?
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.