Avatar billede mvk Nybegynder
19. september 2004 - 10:51 Der er 10 kommentarer og
1 løsning

Styr på recordsæt ved sammentræk af 2 tabeller

jeg har koblet en rating på min liste af dvd film, for at øve mig. men nu viser den kun de film der er blevet rated i stedet for hele listen. + er der nogen måde at regne et gennemsnit ud for filmen hvis den er blevet rated flere gange ?

koden:
<%
Dim rsDvds
Dim rsDvds_numRows

Set rsDvds = Server.CreateObject("ADODB.Recordset")
rsDvds.ActiveConnection = MM_gutternes_STRING
rsDvds.Source = "SELECT *  FROM dvds, rating  WHERE IDdvd=titleID ORDER BY Title ASC"
rsDvds.CursorType = 0
rsDvds.CursorLocation = 2
rsDvds.LockType = 1
rsDvds.Open()

rsDvds_numRows = 0
%>

dvd tabel:
IDdvd
Title
IMDB_link
Udg_year

rating tabel:
IDrating
userID (bruger id på den bruger som har rated titlen)
titleID (id på den film der er blevet rated)
Rating (rating: tal fra 1-5)
Avatar billede tofte Juniormester
19. september 2004 - 11:51 #1
Prøv
SELECT *  FROM dvds LEFT JOIN rating ON IDdvd=titleID ORDER BY Title ASC"
Avatar billede tofte Juniormester
19. september 2004 - 11:58 #2
Hmm det kan godt være at du i stedet skal skrive
SELECT * FROM dvds LEFT JOIN rating ON dvds.IDdvd=rating.titleID;
Avatar billede tofte Juniormester
19. september 2004 - 11:58 #3
eller omvendt, jeg ved ikke lige helt i hvilken tabel IDdvd og titleId findes
Avatar billede mvk Nybegynder
20. september 2004 - 08:55 #4
okay det spiller.

når jeg så smider 'rating' feltet ind fra rating tabellen viser den bare den første rating filmen har modtaget. er der nogen måde at samle alle ratings for den aktulle film så jeg kan regne et gennemsnit ud ?
Avatar billede tofte Juniormester
20. september 2004 - 10:02 #5
ja, du kan få den til at udregne gennemsnittet, du hører lige fra mig om en time, skal lige hjem først.
Avatar billede mvk Nybegynder
20. september 2004 - 10:26 #6
super tak :)
Avatar billede tofte Juniormester
20. september 2004 - 11:02 #7
SELECT dvds.IDdvd, dvds.Title, dvds.IMDB_link, dvds.udg_year, Avg(rating.Rating) AS gns FROM dvds LEFT JOIN rating ON dvds.IDdvd = rating.titleID
GROUP BY dvds.IDdvd, dvds.Title, dvds.IMDB_link, dvds.udg_year;

du kan tilgå gennemsnittet som gns
Avatar billede mvk Nybegynder
20. september 2004 - 11:19 #8
tusinde tak :)
det spiller
Avatar billede mvk Nybegynder
20. september 2004 - 11:50 #9
kan du se hvorfor dette ikke virker har forsøgt at udbygge den:

<%
Dim rsDvds__varTitel
rsDvds__varTitel = "%"
If (Request.Form("titel") <> "") Then
  rsDvds__varTitel = Request.Form("titel")
End If
%>
<%
Dim rsDvds__varUdg
rsDvds__varUdg = "%"
If (Request.Form("udgivelsesaar") <> "") Then
  rsDvds__varUdg = Request.Form("udgivelsesaar")
End If
%>
<%
Dim rsDvds__varSub
rsDvds__varSub = "%"
If (Request.Form("undertekster") <> "") Then
  rsDvds__varSub = Request.Form("undertekster")
End If
%>
<%
Dim rsDvds
Dim rsDvds_numRows

Set rsDvds = Server.CreateObject("ADODB.Recordset")
rsDvds.ActiveConnection = MM_gutternes_STRING
rsDvds.Source = "SELECT dvds.IDdvd, dvds.Title, dvds.IMDB, dvds.Discs, dvds.UdgYear, dvds.DK_Subs, Avg(rating.Rating) AS Rating FROM dvds LEFT JOIN rating ON dvds.IDdvd = rating.titleID WHERE Title LIKE '%" + Replace(rsDvds__varTitel, "'", "''") + "%' AND UdgYear LIKE '" + Replace(rsDvds__varUdg, "'", "''") + "' AND DK_Subs LIKE '" + Replace(rsDvds__varSub, "'", "''") + "' GROUP BY dvds.IDdvd, dvds.Title, dvds.IMDB, dvds.Discs, dvds.UdgYear, dvds.DK_Subs ORDER BY Title ASC"
rsDvds.CursorType = 0
rsDvds.CursorLocation = 2
rsDvds.LockType = 1
rsDvds.Open()

rsDvds_numRows = 0
%>
Avatar billede tofte Juniormester
20. september 2004 - 13:19 #10
du skal bruge HAVING i stedet for WHERE, jeg kan ikke lige overskue syntaxen, men prøv at bytte WHERE ud med HAVING. HAVING skal bruges det du bruger syntaxen GROUP BY
Avatar billede tofte Juniormester
20. september 2004 - 13:48 #11
bemærk HAVING skal stå sidst
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