19. september 2004 - 10:51Der 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)
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 ?
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;
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()
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
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.