webForumDet fria alternativet

Två sql-frågor i en?

7 svar · 328 visningar · startad av Kristianstad

KristianstadMedlem sedan dec. 2002841 inlägg
#1

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
#2

Då det ser ut som om du använder Mysql så är svaret nej. (Om du inte använder 4.1)

KristianstadMedlem sedan dec. 2002841 inlägg
#3

Hej Lars! Jag kör MySQL 4.1!
Går det då?

LarsGMedlem sedan dec. 200012 464 inlägg
#4
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
KristianstadMedlem sedan dec. 2002841 inlägg
#5

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
#6

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.

KristianstadMedlem sedan dec. 2002841 inlägg
#7

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

LarsGMedlem sedan dec. 200012 464 inlägg
#8

Jo

127 ms totalt · 3 externa anrop · v20260731065814-full.1211964f
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)