Går detta att klumpa ihop på något vis i en SQL-sträng.
Tabellen "product_ratings" innehåller:
"PID" (samma som products.id) och "rating" (int)
Önskat resultat: Ta ut all information från tabellen products för ID = Request.QueryString("ID"), hämta alla rader i "product_ratings" som har PID = Request.QueryString("ID"), räkna ihop resultatet med sum() och dela med antalet rader.
Förenklat, få ut snittbetyg och all produktinformation i en SQL-sträng :)
Syntax error (missing operator) in query expression 'avg(cast(pr.ratings as decimal(10,2)))'.
Jag testade att på egen hand sätta in QueryStringen i strängen, men får det inte att funka. Funkar funktionerna du använder dig av i Access, vilket jag använder mig av just nu? Borde kanske ha nämnt det.
strSQL = "select p.id, p.name, avg(cast(pr.ratings as decimal(10,2))) as rate from products p WHERE p.id = " & Request.QueryString("id") & " join product_ratings pr on p.id = pr.pid group by p.id,p.name"
Jajamen, det funkade kalas. Två problem kvarstår / uppkom dock ;)
Jag vill ha ut p.price och p.description, men tar jag med det i strängen klagar den på att jag vill executa en sträng med fält som inte är med i bla bla bla nånting, att fälten jag vill hämta är "onödiga".
Därtill måste Request.QueryString("ID") in någonstans. Nu plockar den samtliga betyg i tabellen, men den skall bara plocka betyg med product_ratings.PID = Request.QueryString("ID"). Resultatet presenteras på ex. default.asp?id=5.
Gick det att tyda? ;)
Edit: You tried to execute a query that does not include the specified expression 'price' as part of an aggregate function Löstes(?) genom "GROUP BY p.id, p.product, p.price, p.description" - det blir inte segt då?
Hoppas du förstår att jag uppskattar din hjälp, även om det inte vill sig riktigt :/
Nu kopierade jag in ditt ovanstående inlägg rakt av, så när som på att "name" byttes mot "product" samt att jag la dit ett "_" där jag antar att det saknas i ditt exempel.
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & path2database
Set RecSet = Server.CreateObject("ADODB.Recordset")
strsql = "select p.id, p.product, p.price, p.description, " & _
" avg(pr.rating + 0.0) as rate " & _
" from products p inner join product_ratings pr " &
" where p.id = " & request.querystring("ID") & _
" on p.id = pr.pid " & _
" group by p.id,p.product,p.price, p.description "
RecSet.Open strSQL, Connect, 1, 3
Så tokigt :) Det funkar dock kalasbra nu... nästan :birp
Vågar jag mig på ännu en fråga? ;)
Problemet är att om det inte finns några röster på en product plockar den inte ut något alls, inte pris, produktnamn, beskrivning eller något. Bästa hade givetvis varit att den i så fall sa ifrån att produkten inte har några röster (och sätter rate till 0.0) och att man får ut all annan information som vanligt.
Du skall ha en stor eloge för att du orkar med alla jobbiga problem, jag har snokat en del i forumet innan :)
Den skriver bara ut 255 tecken av produktbeskrivningen, även då fältet i databasen är av typen PM och innehåller betydligt mycket mer information. Kan man lösa detta på något smidigt sätt?