KristianstadMedlem sedan dec. 2002747 inlägg
I tabellen Filmer finns bland annat:
| ID | Titel |
| 1 | Sagan om Ringen |
| 2 | Sagan om de två Tornen |
| 3 | Djungelboken |
I tabellen Betyg finns bland annat:
| FilmID | Användarnamn | Betyg |
| 1 | Medlem1 | 4,9 |
| 1 | Medlem2 | 3,5 |
| 1 | Medlem3 | 3,8 |
| 3 | Medlem1 | 2,3 |
Jag vill kunna göra lite grejer med dessa data. Jag skall bland annat lista upp samtliga filmer med de med flest betyg högst upp.
SELECT * FROM Filmer ORDER BY vadå? DESC
Den skall alltså lista upp så det i mitt exempel skulle blivit:
-------------------------------
Sagan om Ringen - 4,1 (3)
Djungelboken - 2,3 (1)
Sagan om de två tornen -
--------------------------------
Hur skall jag koda?
LarsGMedlem sedan dec. 200012 465 inlägg
select titel,(select count(*)
from betyg where filmid = f.id) as votes
from filmer as f
order by votes desc
KristianstadMedlem sedan dec. 2002747 inlägg
Tack Lasse! 4 minuter :o
Hur gör jag sedan för att få ut antalet och betyget?
Alltså RS("vadå?")
LarsGMedlem sedan dec. 200012 465 inlägg
KristianstadMedlem sedan dec. 2002747 inlägg
[TCX][MyODBC]Du har något fel i din syntax nära 'select count(*) from betyg where filmid = f.id) as votes from fi' på rad 1
Hmm...varför?
LarsGMedlem sedan dec. 200012 465 inlägg
Åh mysql, inte så duktig på SQL.
select titel, count(b.betyg) as votes
from filmer as f left join betyg b
on f.id = b.filmid
group by titel
order by votes desc
KristianstadMedlem sedan dec. 2002747 inlägg
Du är verkligen en ängel Lasse!
Jag har bara en liten fråga kvar:
Jag kör ASP.
Denna kod fungerar utmärkt på IIS (på webbhotellet). Men då jag kör denna kod på PWS (min egna dator) händer ingenting.
Varför? Finns det något att göra åt detta?
Tack än en gång!
LarsGMedlem sedan dec. 200012 465 inlägg
Jag säger bara en sak, ange
option = 16384
i din connectionsträng.
KristianstadMedlem sedan dec. 2002747 inlägg
Milde makter! Uppsalabor gör skäl för sitt rykte - att de är smarta.
Hur kommer det sig att man måste lägga på option i connectionsträngen? Tänk att det var så lätt.
Tack tack!
KristianstadMedlem sedan dec. 2002747 inlägg
Det var hemskt va jag var frågosam idag. Skäms lite. :stud
Var skall jag lägga till WHERE i SQL-frågan?
select titel, count(b.betyg) as votes from filmer as f left join betyg on f.id = b.filmid group by titel order by votes desc
Jag vill lägga till where i filmer-tabellen. Och det fungerar inte med:
select titel, count(b.betyg) as votes from filmer where status='ok' as f left join betyg on f.id = b.filmid group by titel order by votes desc
Hmm...
:bire
LarsGMedlem sedan dec. 200012 465 inlägg
select titel, count(b.betyg) as votes from filmer as f left join betyg on f.id = b.filmid where status='ok' group by titel order by votes desc
KristianstadMedlem sedan dec. 2002747 inlägg
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[TCX][MyODBC]Kolumn: 'status' i where clause är inte unik
Ack, ack, ack. ;)
Stackars Lars...
LarsGMedlem sedan dec. 200012 465 inlägg
Eftersom du, uppenbarligen, har status i båda tabellerna så måste du ange vilken du avser.
select titel, count(b.betyg) as votes
from filmer as f left join betyg on f.id = b.filmid
where [b]f.[/b]status='ok'
group by titel
order by votes desc
t.ex.
KristianstadMedlem sedan dec. 2002747 inlägg
KristianstadMedlem sedan dec. 2002747 inlägg
Du Lars!
En sak du glömte i SQL-frågan var att den inte skall räkna med de filmer som inte har ett enda betyg. :)
Hur fixar man det? Försökte skriva i något i WHERE, men det gick inte. Felaktig användning av SQL grupp function, m.m. kom upp :)
Tack på förhand!
LarsGMedlem sedan dec. 200012 465 inlägg
Något sådant krav har aldrig förekommit så vitt jag kan se.
Byt left join mot inner join.
KristianstadMedlem sedan dec. 2002747 inlägg
Count till paging?
Hur skulle en count till paging-funktion kunna göras med hjälp utav denna kod jag har just nu?
Hur fungerar client-side cursor? Räcker det inte med sql-kod, utan måste jag lägga till komponenter och sådant på servern?
Tack på förhand!
LarsGMedlem sedan dec. 200012 465 inlägg
Recordset i ASP håller reda på hur många poster det finns i en resultatmängd. Det finns en egenskap som heter recordcount som innehåller antalet. För att det skall fungera med Mysql så verkar det som om man måste använda client-side cursors.
Det finn stöd för client-side cursor i ADO som det är. Innan open på ett recordset så har man följande kod
set rs = server.createobject("adodb.recordset")
set rs.cursorlocation = 3 'aduseclient
rs.open selectQuery
KristianstadMedlem sedan dec. 2002747 inlägg
Hej Lars!
Tack så hjärtligt!
Hur gör jag sedan med SQL-frågan då jag har denna kod? Hur får jag alltså fram talet på alla poster?
KristianstadMedlem sedan dec. 2002747 inlägg
Det är förmodligen jag som är okunnig och använder Din kod på felaktigt sätt. Jag är lite förvirrad och vet inte riktigt var och hur jag skall placera denna kod.
Jag testade följande:
' Connectsträng
' SQL-fråga (som ovan)
set rs = server.createobject("adodb.recordset")
set rs.cursorlocation = 3 'aduseclient
rs.open selectQuery
Det blev felmeddelande: Objekt krävs.: 'rs.cursorlocation'
Vad är det jag gör fel? Hur skall det vara? Hur får jag antalet poster till en variabel?
Tack på förhand! Din hjälp är ovärderlig!