Hej!
Connect.Execute("SELECT titel, ar, f.id, count(b.betyg) AS votes,sum(b.betyg)/count(b.betyg) AS betyg
FROM filmer AS f
LEFT JOIN betyg b
ON f.id = b.filmid
GROUP BY f.id
HAVING votes >= 4
ORDER BY Titel")
Do Until RS.EOF
Connect.Execute("SELECT AVG(Betyg) as Betyg, Count(Betyg) as antal
FROM Betyg
WHERE (Anvandarnamn='Användare1' OR Anvandarnamn='Användare2') AND Titel='" & RS("Titel") & "'")
Loop
(har förenklat utseendet på sql-frågorna genom radbrytningar)
Detta borde väl ta en hel del prestanda på servern? Jag har räknat ut att det på sidan totalt kommer vara 45 sql-satser per sida, vilket borde vara rätt mycket?
Finns det något sätt att slippa ha en sql-fråga mitt inne i loopen? (Att alltså ha den inne i den första sql-frågan)
Hoppas ni förstår vad jag menar!
Tack på förhand!
LarsGMedlem sedan dec. 200012 464 inlägg Då det ser ut som om du använder Mysql så är svaret nej. (Om du inte använder 4.1)
Hej Lars! Jag kör MySQL 4.1!
Går det då?
LarsGMedlem sedan dec. 200012 464 inlägg SELECT titel, ar, f.id,
count(b.betyg) AS votes,
sum(b.betyg)/count(b.betyg) AS betyg,
(SELECT AVG(Betyg) as Betyg,
FROM Betyg
WHERE Anvandarnamn in ('Användare1' ,'Användare2') AND Titel= b.titel) as avgBetyg,
(SELECT count(Betyg)
FROM Betyg
WHERE Anvandarnamn in ('Användare1' ,'Användare2') AND Titel= b.titel) as antal
FROM filmer AS f
LEFT JOIN betyg b
ON f.id = b.filmid
GROUP BY titel,ar,f.id
HAVING count(b.betyg) >= 4
ORDER BY Titel
Hej Lars!
Jag fick detta felmeddelande:
Microsoft OLE DB Provider for ODBC Drivers error '80040e09'
[TCX][MyODBC]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT AVG(Betyg) as Betyg, FROM Betyg WHERE Anvandarnamn in ('
Jag frågade webbhotellet och de sa att de hade MySQL 4.1. Är det fel på koden eller är det fel hos webbhotellet?
LarsGMedlem sedan dec. 200012 464 inlägg Jag hade ett fel i min kod.
SELECT titel, ar, f.id,
count(b.betyg) AS votes,
sum(b.betyg)/count(b.betyg) AS betyg,
(SELECT AVG(Betyg)
FROM Betyg
WHERE Anvandarnamn in ('Användare1' ,'Användare2') AND Titel= b.titel) as avgBetyg,
(SELECT count(Betyg)
FROM Betyg
WHERE Anvandarnamn in ('Användare1' ,'Användare2') AND Titel= b.titel) as antal
FROM filmer AS f
LEFT JOIN betyg b
ON f.id = b.filmid
GROUP BY titel,ar,f.id
HAVING count(b.betyg) >= 4
ORDER BY Titel
Felmeddelandet tyder på att det är subselecten som den inte gillar. Jag tycker att det låter konstigt att ett Webhotell skulle använda 4.1 eftersom det inte är en officiell release ännu.
Hej!
Ack, han hade blandat ihop lite. Han hade endast den stabila versionen.
Det finns inget annat att göra mha. mysql?
Är det skillnad på prestandan på det första jag beskrev (köra en sql-fråga i loopen) och att köra allt i sql:en?
Tack tack