Avatar billede zantiago Nybegynder
18. december 2003 - 15:03 Der 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...

Hvordan ser det lige ud i en sql sætning?

På forhånd tak..

//Z
Avatar billede musicchart.dk Nybegynder
18. december 2003 - 15:16 #1
strSQL = "SELECT * FROM trailer"
Set rs = Conn.Execute(strSQL)

Do
  strSQL2 = "SELECT * FROM film WHERE id = " & rs("id")
  Set rs2 = Conn.Execute(strSQL2)

  response.write(rs2("film"))

rs.movenext
Loop until rs.eof
Avatar billede zantiago Nybegynder
18. december 2003 - 15:23 #2
Cool - tester lige...
Avatar billede zantiago Nybegynder
18. december 2003 - 15:49 #3
Ok - flovt... Glemte en lille detalje.. :o(

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..

Håber stadig du / I kan hjælpe..
Avatar billede overchord Nybegynder
18. december 2003 - 15:58 #4
udskifte strSQL med
strSQL = "SELECT * FROM trailer WHERE titel like '" & request.Querystring("bogstav") & "*'"
Avatar billede zantiago Nybegynder
18. december 2003 - 16:02 #5
Trailer tabellen har ingen titel. Den skal den finde i film-tabellen..
Avatar billede musicchart.dk Nybegynder
18. december 2003 - 16:22 #6
bogstav = request.Querystring("bogstav")

strSQL = "SELECT * FROM trailer WHERE titel LIKE '"& bogstav &"%'"
Set rs = Conn.Execute(strSQL)

Do
  strSQL2 = "SELECT * FROM film WHERE id = " & rs("id")
  Set rs2 = Conn.Execute(strSQL2)

  response.write(rs2("film"))

rs.movenext
Loop until rs.eof
Avatar billede musicchart.dk Nybegynder
18. december 2003 - 16:23 #7
bogstav = request.Querystring("bogstav")

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)

  response.write(rs2("film"))

rs.movenext
Loop until rs.eof
end if
Avatar billede musicchart.dk Nybegynder
18. december 2003 - 16:38 #8
bogstav = request.Querystring("bogstav")

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)

  response.write(rs2("film"))

rs.movenext
Loop until rs.eof
end if
Avatar billede netro Nybegynder
18. december 2003 - 16:58 #9
Glem det med SQL'statements inde i løkken. Det er aaalt for krævende.
Du skal lave dig en Left Join af de to tabeller:

Set rs = obj.Execute("Select f.Filmtitel, t.Film From trailer t Left Join film f On t.FilmID = f.FilmID")

While Not rs.EOF
  Response.Write rs("Film") & " (" & rs("Filmtitel") & ")<br>"
  rs.MoveNext
Wend

På den måde får du alle trailers ud med filmens navn angivet bagefter.
Avatar billede musicchart.dk Nybegynder
18. december 2003 - 17:04 #10
virker netro's - så stik dig til den, da du slipper for en sql statement inde i løkken. Og du slipper med at lave een SQL streng
Avatar billede zantiago Nybegynder
18. december 2003 - 18:17 #11
En dag må jeg lære det der Join :o)

Hvis jeg nu lige skriver hvad felterne hedder, kan du så ik lige sætte de rigtige navne ind?
Hvor kalder jeg databasen?
Avatar billede zantiago Nybegynder
18. december 2003 - 18:18 #12
[trailers]
id
filmid
tekst

[film]
id
titel
Avatar billede netro Nybegynder
18. december 2003 - 18:30 #13
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
Avatar billede zantiago Nybegynder
18. december 2003 - 18:41 #14
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
Avatar billede netro Nybegynder
18. december 2003 - 18:52 #15
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
Avatar billede zantiago Nybegynder
18. december 2003 - 19:19 #16
Ok - cool.. Men hvordan ved den at f = film og t = trailer, eller skal jeg selv rette det og skrive film.titel osv??
Avatar billede netro Nybegynder
18. december 2003 - 19:35 #17
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.
Avatar billede zantiago Nybegynder
18. december 2003 - 19:52 #18
men jeg skal vel så skrive inden SQL sætningen:
f = film
t = trailers

Right??
Avatar billede netro Nybegynder
18. december 2003 - 19:56 #19
Nej!

Det står i selve SQL-sætningen:

Select f.titel, t.tekst From trailers ->t<- Left Join film ->f<- On t.FilmID = f.FilmID Order By id Desc
Avatar billede zantiago Nybegynder
18. december 2003 - 19:58 #20
Frækt :o)
Avatar billede netro Nybegynder
18. december 2003 - 19:59 #21
På grænsen til det perverse, ja...
Avatar billede zantiago Nybegynder
18. december 2003 - 20:14 #22
Ok - Så tror jeg den er ved at være der, men hvad skete der med:
Request.QueryString("Bogstav") ???
Avatar billede netro Nybegynder
18. december 2003 - 20:38 #23
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
Avatar billede zantiago Nybegynder
18. december 2003 - 20:47 #24
[Microsoft][ODBC Microsoft Access Driver] The specified field 'id' could refer to more than one table listed in the FROM clause of your SQL statement.

Hvis jeg så skriver f.id skriver den:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
Avatar billede zantiago Nybegynder
18. december 2003 - 21:09 #25
nogen gode idéer??
Avatar billede netro Nybegynder
18. december 2003 - 21:09 #26
Er det dette, du har prøvet?

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
Avatar billede netro Nybegynder
18. december 2003 - 21:11 #27
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
Avatar billede zantiago Nybegynder
18. december 2003 - 21:12 #28
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
%>
Avatar billede netro Nybegynder
18. december 2003 - 21:14 #29
Du må lige finde ud af, om din tabel hedder "film" eller "movies".

Husk %-tegnet.
Avatar billede netro Nybegynder
18. december 2003 - 21:15 #30
Hvor kommer referrence nu fra??
Avatar billede netro Nybegynder
18. december 2003 - 21:25 #31
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.
Avatar billede zantiago Nybegynder
18. december 2003 - 21:28 #32
[trailers]
id
reference
html

[movies]
id
titel

trailers.reference passer på movies.id
Avatar billede zantiago Nybegynder
18. december 2003 - 21:40 #33
Kan du gennemskue det? :o)
Avatar billede netro Nybegynder
18. december 2003 - 21:56 #34
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.
Avatar billede netro Nybegynder
18. december 2003 - 21:59 #35
-- at jeg også har fjernet et
Avatar billede zantiago Nybegynder
18. december 2003 - 22:27 #36
COOL =D
Avatar billede netro Nybegynder
18. december 2003 - 22:45 #37
Tak for points :)
Avatar billede zantiago Nybegynder
18. december 2003 - 22:47 #38
No no - Det er mig der takker.....
Avatar billede netro Nybegynder
18. december 2003 - 22:57 #39
Ok ;o)
Avatar billede zantiago Nybegynder
23. december 2003 - 17:40 #40
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.

trailers.asp, line 79
Avatar billede netro Nybegynder
23. december 2003 - 18:39 #41
id er ikke med i din select.

RS.open "Select m.id, m.titel, t.html From trailers ...
Avatar billede zantiago Nybegynder
23. december 2003 - 18:45 #42
Cool Tak - Den havde jeg ik lige set ;o)

God Jul

//Z
Avatar billede netro Nybegynder
23. december 2003 - 18:54 #43
Tak ilm ;)
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