18. december 2003 - 15:03Der er
42 kommentarer og 1 løsning
vælg poster fra en tabel på baggrund af en anden
Hej Eksperter
Jeg skal lave et udtræk fra en database med film.
Den skal vise alle film der har en trailer tilknyttet.
To tabeller: [film] [trailer]
Så hent alle film der er oprettet i trailertabellen.
I tabellen med trailere har jeg oprettet en post med filmid, så det er bare hvis id'et fra tabellen film er lige med filmid fra trailertabellen, så må den vi posten...
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Når man skal se listen, har man på forhånd valgt et bogstav som filmen skal starte med. Den hentes ved: Request.Querystring("bogstav")
Men den kan jeg ikke umiddelbart bygge ind i sætningen, der nu lyder: Hent alle film med A (eller hvilket bogstav der er valgt) som eksisterer i trailer tabellen..
strSQL = "SELECT * FROM trailer WHERE titel LIKE '"& bogstav &"%'" Set rs = Conn.Execute(strSQL)
if rs.eof then response.write("Der er ingen film der begynder med '" & bogstav & "'") else Do strSQL2 = "SELECT * FROM film WHERE id = " & rs("id") Set rs2 = Conn.Execute(strSQL2)
strSQL = "SELECT * FROM trailer WHERE titel LIKE '"& bogstav &"%'" Set rs = Conn.Execute(strSQL)
if rs.eof then response.write("Der er ingen film der begynder med '" & bogstav & "'") else Do strSQL2 = "SELECT * FROM film WHERE id = " & rs("filmid") Set rs2 = Conn.Execute(strSQL2)
Hvor du kalder den? Åbner den? Det gør du inden følgende udtræk, og forbindelsesstrengen kommer selvfølgelig an på, hvad det er for en db, du opererer med.
==========================
Set rs = obj.Execute("Select f.titel, t.tekst From trailers t Left Join film f On t.FilmID = f.FilmID")
While Not rs.EOF Response.Write rs("tekst") & " (" & rs("titel") & ")<br>" rs.MoveNext Wend
kalder min acces database med conn eks: Set RS_trailer = Server.CreateObject("ADODB.RecordSet") RS_trailer.open "Select * From [trailers] Order by id desc" , Conn
Set RS_trailer = Server.CreateObject("ADODB.RecordSet") RS_trailer.open "Select f.titel, t.tekst From trailers t Left Join film f On t.FilmID = f.FilmID Order By id Desc", Conn
Vi giver tabellerne et alias, så sætningen forkortes lidt.
trailers t film f
I stedet for at skrive film.titel, kan vi derfor blot skrive f.titel. Det er især en fordel med store statements. I dette tilfælde har det ikke den store betydning, da det er en rimelig kort forespørgsel.
Set RS_trailer = Server.CreateObject("ADODB.RecordSet") RS_trailer.open "Select f.titel, t.tekst From trailers t Left Join film f On t.FilmID = f.FilmID Where f.titel Like '" & request.Querystring("bogstav") & "*' Order By id Desc", Conn
Set RS_trailer = Server.CreateObject("ADODB.RecordSet") RS_trailer.open "Select f.titel, t.tekst From trailers t Left Join film f On t.filmid = f.id Where f.titel Like '" & request.Querystring("bogstav") & "*' Order By id Desc", Conn
Nå, der er smuttet en * ind. Sådan går det med cut'n'past. Du får den lige igen:
Set RS_trailer = Server.CreateObject("ADODB.RecordSet") RS_trailer.open "Select f.titel, t.tekst From trailers t Left Join film f On t.filmid = f.id Where f.titel Like '" & request.Querystring("bogstav") & "%' Order By id Desc", Conn
den har jeg faktisk fjernet - kan det være andet.. Jeg har rettet den til så den passer til mit scrips - Nogen fejl?
------------------------------ <% Set RS_trailer = Server.CreateObject("ADODB.RecordSet") RS_trailer.open "Select f.titel, t.tekst From trailers t Left Join movies f On t.referrence = f.id Where f.titel Like '" & request.Querystring("bogstav") & "' Order By id Desc", Conn_sites Do while not rs_trailer.eof %> <%=RS_trailer("titel")%><br> <% rs_trailer.MoveNext loop %>
Prøv lige at vise opsætningen af dine to tabeller med alle navne, og hvilken kolonne der skal referere til hvilken. Ellers er det jo ikke til at finde ud af, når kolonne- og tabelnavne bare står og skifter.
Ja ja ;) Og nu gætter jeg så på, at det er kolonnen "html", du vil have ud fra trailers.
<% Set RS_trailer = Server.CreateObject("ADODB.RecordSet") RS_trailer.open "Select m.titel, t.html From trailers t Left Join movies m On t.reference = m.id Where m.titel Like '" & request.Querystring("bogstav") & "%' Order By m.id Desc", Conn_sites Do while not RS_trailer.eof Response.Write RS_trailer("html") & " - " & RS_trailer("titel") & "<br>" rs_trailer.MoveNext loop %>
Bemærk i øvrigt at jeg også har et "r" i reference. Hvis kolonnenavnene ikke staves på samme måde overalt, er der jo heller ikke noget at sige til, du får alle de fejl.
Jeg får sjovt nok pludselig en fejl på mit script :o(
RS.open "Select m.titel, t.html From trailers t Left Join movies m On t.referrence = m.id WHERE t.site = 'movies' AND m.titel Like '" & request.Querystring("bogstav") & "%' Order By m.id Desc", Conn_sites
Prøver at udskrive: <%=RS("id")%>
De to tabeller: [trailers] Id Referrence html dato site
[movies] id titel
Hvad har jeg gjort galt??
ASP-fejlen er:
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
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.