Avatar billede zantiago Nybegynder
17. februar 2003 - 23:10 Der er 22 kommentarer og
1 løsning

Select top 5

Hejsa!!

Jeg har et lille problem! Jeg har lavet en afstemning:
Se her:
<%
Set RS_jokes_point = Server.CreateObject("ADODB.RecordSet")
RS_jokes_point.open "Select * From [Jokes_points] WHERE joke_id = " & RS_jokes("id") &"" , Conn, 1, 3
Set RS_jokes_pointsum = Server.CreateObject("ADODB.RecordSet")
           
RS_jokes_pointsum.open "SELECT sum(points) as antal From [Jokes_points] WHERE joke_id = " & RS_jokes("id") &"" , Conn, 1, 3
if not RS_jokes_pointsum.eof then %>
<% if RS_jokes_pointsum("antal") <> "" Then %>
<% resultat = RS_jokes_pointsum("antal") / RS_jokes_point.recordcount %>
Brugernes bedømmelse:<br>
<Img src="img/<% response.write(Round(resultat)) %>.jpg">


Nu vil jeg gerne på min forside liste de 5 mest populære!

Den skal altså tælle alle posternes point sammen og så sortere dem efter flest point..

Vil gerne se lidt kode :o)

På forhånd tak

/Bruhh
Avatar billede medions Nybegynder
17. februar 2003 - 23:12 #1
<%
Set RS_jokes_point = Server.CreateObject("ADODB.RecordSet")
RS_jokes_point.open "Select * From [Jokes_points] WHERE joke_id = " & RS_jokes("id") &"" , Conn, 1, 3
Set RS_jokes_pointsum = Server.CreateObject("ADODB.RecordSet")
           
RS_jokes_pointsum.open "SELECT TOP 5 *, sum(points) as antal From [Jokes_points] WHERE joke_id = " & RS_jokes("id") &"" , Conn, 1, 3
if not RS_jokes_pointsum.eof then %>
<% if RS_jokes_pointsum("antal") <> "" Then %>
<% resultat = RS_jokes_pointsum("antal") / RS_jokes_point.recordcount %>
Brugernes bedømmelse:<br>
<Img src="img/<% response.write(Round(resultat)) %>.jpg">

//>Rune
Avatar billede eagleeye Praktikant
17. februar 2003 - 23:12 #2
Du kan lave en SQL som denne:

"SELECT TOP 5 sum(points) as antal From [Jokes_points] GROUP BY joke_id ORDER BY sum(points) DESC;"
Avatar billede beorndesign Nybegynder
17. februar 2003 - 23:24 #3
Er det til mySQL, skal du bruge denne:

"SELECT *, sum(points) AS antal FROM [Jokes_points] WHERE joke_id = '" & RS_jokes("id") & "' GROUP BY joke_id ORDER BY antal DESC LIMIT 0, 5"

/Beorn
Avatar billede eagleeye Praktikant
17. februar 2003 - 23:25 #4
Hvis du har en anden talet som hedder Jokes og du vil havde vist joken (joke) og summen af stemmer så prøv med dette:


SQL = "SELECT TOP 5 jokes.joke, Sum(Jokes_points.points) AS antal"
SQL = SQL & "FROM Jokes_points LEFT JOIN jokes ON Jokes_points.joke_id = jokes.id "
SQL = SQL & "GROUP BY Jokes_points.joke_id, jokes.joke"
SQL = SQL & "ORDER BY Sum(Jokes_points.points) DESC;"

Set rs = Conn.Execute(SQL)

do while not rs.EOF
  Response.write "Antal stemmer : " & rs("antal") & "<br>"
  Response.write rs("joke") & "<br>"
  rs.MoveNext
loop
Avatar billede zantiago Nybegynder
17. februar 2003 - 23:27 #5
Der er en tabel der hedder [jokes] så er der en der hedder [jokes_points], jeg skal bare hente de fem mest populære jokes fra [jokes] der har flest points i [jokes_points] - Det er til Access
Avatar billede eagleeye Praktikant
17. februar 2003 - 23:27 #6
Se 17/02-2003 23:25:07
Avatar billede zantiago Nybegynder
17. februar 2003 - 23:36 #7
<%
i=1

SQL = "SELECT TOP 5 jokes.joke, Sum(Jokes_points.points) AS antal"
SQL = SQL & "FROM Jokes_points LEFT JOIN jokes ON Jokes_points.joke_id = jokes.id "
SQL = SQL & "GROUP BY Jokes_points.joke_id, jokes.joke"
SQL = SQL & "ORDER BY Sum(Jokes_points.points) DESC;"
Set rs = Conn.Execute(SQL)

do while not rs.EOF
%>
<%=i%>.<a href="joke.asp?id=<%=rs("id")%>"><%=RS("titel")%></a>
<%
rs.MoveNext
loop
%>

Får en fejl:
Microsoft VBScript runtime error '800a01a8'
Object required: 'DSN=database'

/jokes/index_jokes.asp, line 90
Avatar billede zantiago Nybegynder
17. februar 2003 - 23:37 #8
Glemte lige at : i=1+1, ikke at det skulle have den store betydning
Avatar billede eagleeye Praktikant
17. februar 2003 - 23:38 #9
Du skal huske at havde din database connection ( Conn ) med, og den skal åbnes før den kan bruges.
Avatar billede eagleeye Praktikant
17. februar 2003 - 23:42 #10
Og hvis din kolonne hedder titel og ikke joke som jeg har kaldt den så skal SQL'en være:

SQL = "SELECT TOP 5 jokes.titel, Sum(Jokes_points.points) AS antal"
SQL = SQL & "FROM Jokes_points LEFT JOIN jokes ON Jokes_points.joke_id = jokes.id "
SQL = SQL & "GROUP BY Jokes_points.joke_id, jokes.titel"
SQL = SQL & "ORDER BY Sum(Jokes_points.points) DESC;"
Set rs = Conn.Execute(SQL)
Avatar billede zantiago Nybegynder
17. februar 2003 - 23:45 #11
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] The SELECT statement includes a reserved word or an argument name that is misspelled or missing, or the punctuation is incorrect.

/jokes/index_jokes.asp, line 94
Avatar billede zantiago Nybegynder
17. februar 2003 - 23:47 #12
har rettet joke til titel
Avatar billede eagleeye Praktikant
17. februar 2003 - 23:50 #13
der mangler et par mellemrum, et før FROM og et før ORDER BY så prøv:

SQL = "SELECT TOP 5 jokes.titel, Sum(Jokes_points.points) AS antal"
SQL = SQL & " FROM Jokes_points LEFT JOIN jokes ON Jokes_points.joke_id = jokes.id "
SQL = SQL & " GROUP BY Jokes_points.joke_id, jokes.titel"
SQL = SQL & " ORDER BY Sum(Jokes_points.points) DESC;"
Avatar billede zantiago Nybegynder
17. februar 2003 - 23:54 #14
Meget bedrem får bare en fejl på rs feltet, er det fordi den henter fra jokes_point? Jeg kan ikke hente følgene:
<%=rs("id")%>
<%=RS("titel")%>
Avatar billede eagleeye Praktikant
17. februar 2003 - 23:57 #15
Så prøv at tilføre  til SELECT delen:


SQL = "SELECT TOP 5 jokes.titel, jokes.joke_id, Sum(Jokes_points.points) AS antal"
SQL = SQL & " FROM Jokes_points LEFT JOIN jokes ON Jokes_points.joke_id = jokes.id "
SQL = SQL & " GROUP BY Jokes_points.joke_id, jokes.titel"
SQL = SQL & " ORDER BY Sum(Jokes_points.points) DESC;"
Avatar billede eagleeye Praktikant
17. februar 2003 - 23:57 #16
Det skal jo så være jokes.ID ups.. sådan her:

SQL = "SELECT TOP 5 jokes.titel, jokes.id, Sum(Jokes_points.points) AS antal"
SQL = SQL & " FROM Jokes_points LEFT JOIN jokes ON Jokes_points.joke_id = jokes.id "
SQL = SQL & " GROUP BY Jokes_points.joke_id, jokes.titel, jokes.id"
SQL = SQL & " ORDER BY Sum(Jokes_points.points) DESC;"
Avatar billede zantiago Nybegynder
17. februar 2003 - 23:58 #17
Arh.. Tak - God aften / nat til dig.. :o)
Avatar billede zantiago Nybegynder
18. februar 2003 - 00:02 #18
Arghhhh.. VENT!!

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'Id' as part of an aggregate function.

/jokes/index_jokes.asp, line 94
Avatar billede eagleeye Praktikant
18. februar 2003 - 00:05 #19
Har på copy/pasted hele den sidste SQL?
For jokes.id skal nemlig også med i GROUP BY delen for den fejl ikke kommer.

SQL = SQL & " GROUP BY Jokes_points.joke_id, jokes.titel, jokes.id"
Avatar billede zantiago Nybegynder
18. februar 2003 - 00:08 #20
Tak - Den tæller dog ikke helt optimalt..
http://jokes.zantiago.com - Se under top 5 - prøv at trykke på den enkelte vittighed, og se karakteren i bunden
Avatar billede zantiago Nybegynder
18. februar 2003 - 00:13 #21
Er det fordi den tæller hvor mange gange den fremkommer i jokes_points?
Hver joke for en karakter i mellem 1 - 6.. Så den skulle gerne tælle alle pointsene sammen, derefter dividere med antallet gange den er fremkommet, og så går videre til næste for at til sidst finde de 5 med det største gennemsnit..
Avatar billede eagleeye Praktikant
18. februar 2003 - 00:19 #22
Arh det er gennemsnitte du vil havde? Så udskift Sum med Avg i SQL sætningen:

SQL = "SELECT TOP 5 jokes.titel, jokes.id, Avg(Jokes_points.points) AS antal"
SQL = SQL & " FROM Jokes_points LEFT JOIN jokes ON Jokes_points.joke_id = jokes.id "
SQL = SQL & " GROUP BY Jokes_points.joke_id, jokes.titel, jokes.id"
SQL = SQL & " ORDER BY Avg(Jokes_points.points) DESC;"
Avatar billede zantiago Nybegynder
18. februar 2003 - 00:24 #23
He he - Så forstyrer jeg heller ikke mere.. Gaabb ZzZzZz Tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester